Vă mulțumim pentru susținere

De ce este Git mai bun decât subversiunea?

Am folosit Subversion pentru câțiva ani și după ce am folosit SourceSafe , îmi place doar Subversion. În combinație cu TortoiseSVN , nu-mi pot imagina cum ar putea fi mai bine.

Cu toate acestea, există un număr tot mai mare de dezvoltatori care pretind că Subversion are probleme și că ar trebui să ne mutăm la noua generație de sisteme de control al versiunilor distribuite, cum ar fi Git .

Cum îmbunătățește Git subversiunea?

0
adăugat editat
Interesant, mesajul mai detaliat pe care l-ați postat ca parte a celei mai recente modificări este același ca în sharepointoverflow.com/questions/966/…
adăugat autor Darren Kopp
Acesta este ceva care vine cu VseWss 1.3 nu-i așa?
adăugat autor Darren Kopp
Poate ar trebui să postați un link la o referință în care se spune că comanda pe care încercați să o rulați ar trebui să funcționeze.
adăugat autor Darren Kopp
Puteți fi mai specific? Este întrebarea despre ce legătură are localizarea Bousfield cu ciclurile de dispariție?
adăugat autor Stephen Pellicer
Ar fi oricare dintre cipurile menționate în electronics.stackexchange.com/questions/6676/… munca pentru tine?
adăugat autor Jeremy Ruten
Încercați să puneți o întrebare în titlu. De asemenea, numele reale sunt minunate.
adăugat autor Jarrod Dixon
"Există analoga ..." nu este numai englez, ci lame. :-)
adăugat autor Jarrod Dixon
Acest lucru mă face să mă gândesc la pluralii latini, analogic -> analogi ?
adăugat autor Ilya Nikokoshev
"Poți să fii mai specific?" Este pur și simplu faptul că printre numeroasele probleme pe care le menționează Morava în articolul său, ultimul comentariu despre ciclurile de dispariție mi se părea aproape de înțeles, dar experții pe care i-am întrebat despre asta au răspuns rău contradictorii. Deci, am concluzionat că am pierdut o înțelegere și am întrebat mai mult. Conc. "nume reale": Anonimatul face mai ușor să întrebi întrebările prost.
adăugat autor Thomas Riepe
@Japp, aveți dreptate că folosim VseWss 1.3, am actualizat întrebarea
adăugat autor Shiraz Bhaiji

31 răspunsuri

ați încercat să căutați în seria de logică 74xx? Alegeți aroma preferată. 74HC194 și 74HC195 sunt registre de deplasare pe 4 biți; 74HC174 (quad flip-flop) și 74HC175 (flip-flop hexazecimal) pot fi transformate în registre de deplasare.

editați: pe baza comentariilor dvs., de ce nu utilizați un HC594 (ieșire) sau HC597 (de intrare)? Sunt registre pe 8 biți, ușor de cascadabil la lungimi arbitrare, compatibile cu o interfață SPI, precum și cu ceasuri simple vechi.

8
adăugat
Caut ceva care îmi permite să pun mai multe împreună într-un lanț de daisy, la fel ca MAX6969 de la Maxim, prin care când fac clic pe Cin, 16 cicluri de ceas mai târziu apar la Dout. Deci, pentru a avea două dintre aceleași jetoane unul lângă celălalt, pot trimite 32 de biți de date, iar ambele cipuri vor conține acum date.
adăugat autor urini

Îmi cer scuze dacă este prea mult sau prea puțin; lasă un comentariu și pot încerca să îl corectez. Vorbește despre o problemă specifică din teoria homotopiei că ne-ar plăcea să înțelegem mai bine.

Categoria homotopică stabilă (implicit localizată la un prim p) are o stratificare în straturi "cromatice", care corespund unei legături cu legile grupului oficial. Considerăm geometric categoria homotopie stabilă ca fiind o anumită categorie de sheave pe un stack moduli X care are o secvență de substale deschise X (n) - acestea sunt categoriile "E (n) -locale" și există localizare Bousfield functorii care iau un element general M la E (n) -localizarea lui L E (n) M, pe care îl puteți considera ca limitând la substala deschisă. (O localizare generală a Bousfield va lua o noțiune de "echivalență" și va construi o nouă categorie universală în care acele echivalențe devin izomorfisme, dar într-un mod corespunzător derivat.)

Diferența X (n) \ X (n-1) între două straturi adiacente este o substație închisă a lui X (n), care în limba noastră este categoria "K (n) -locală". Există, de asemenea, un functor de localizare Bousfield care ia un element M la K (n) -localizarea lui L K (n) M. Localizarea lui Bousfield este destul de generală și în situația anterioară "deschisă" ca restricție; în această situație "închisă" acționează ca o completare de-a lungul substactei închise.

Avem o înțelegere generală a categoriilor K (n) -locale. Ele se comportă foarte mult ca un anumit tip de coeficient de spațiu al unui spațiu Lubin-Tate care clasifică deformările unei legi formale de înălțime n prin schema de grupare a automorfizărilor din legea grupului oficial, care este grupul stabilizator nora Morava S n . Din punct de vedere geometric, ne gândim la aceasta ca la un punct cu un grup destul de mare de auto-morfism (chiar dacă aceasta este, desigur, modul greșit de a gândi despre lucruri ). Acestea sunt locuri unde puteți să murdăriți și să efectuați anumite calcule și să examinați câte un strat cromatic la un moment dat.

Există două fragmente rămase de date de care avem nevoie, atunci, pentru a înțelege M însuși din localizările sale L K (n) M: trebuie să înțelegem cum sunt patch-uri împreună în E (n) , și trebuie să înțelegem limita lui L E (n) M. Acesta din urmă este o chestiune de "convergență cromatică" și nu este imediat relevantă pentru punctul în discuție.

În general, există o diagramă de tip "patching", care este aproximativ ceva asemănător cu datele pe care le-ați asocia, de obicei, cu o reculegere. (Referința mea preferată pentru date în acest tip de situație este Mazur's "Note privind co-omologia etale a câmpurilor de număr".) Avem o diagrama de revenire (homotopy)

LE(n) M  ->  LE(n-1) M
     |             |
     V             V
LK(n) M  ->  LE(n-1) LK(n) M

care ne spune că un obiect general E (n) -local este reconstruit dintr-un obiect K (n) -local (ceva concentrat pe stivă închisă), un obiect E (n-1) -local (concentrat pe stivă deschisă) , și patch-uri de date (o hartă din obiectul de pe stivă deschisă până la restrângerea obiectului complet la stivă deschisă). Acest lucru este urmat, deoarece K (n) -localizarea oricărui obiect E (n-1) -local este trivial.

Functorul care ia un obiect concentrat aproape de substala închisă și-l restrânge (într-un mod derivat) la substala deschisă este ceea ce Morava consideră. Aici, în limba de localizare Bousfield, E (n-1) -localizare este aplicată obiectelor K (n) -locale. Ceea ce pare să propună este ca această configurație generalizată de localizare Bousfield să fie o modalitate de a gândi despre functorii de cicluri de dispariție (și eu sunt de acord cu disprețul față de terminologia "dispariției") în care putem, într-un mod complet derivat, să vedem sheaves pe o stivă mare ca provenind de la patching datele pe o pereche deschis-închise.

Doar pentru a închide bucla, ceea ce nu înțelegem deloc în această imagine este ceea ce face cu adevărat acest "strat trans-cromatic". Avem, de exemplu, două grupuri de stabilizatori legați de legile grupurilor oficiale ale înălțimilor adiacente și nu înțelegem cu adevărat ce functor de specializare face cu adevărat în acest caz.

7
adăugat
@SGP: Teoriile de cohomologie ar trebui să fie ceva ca niște sheaves quasicoherent, da. Cred că aș spune că felul de functor de "cicluri de dispariție" nu ar putea fi obținut în acest caz de la descompunerea în snopi într-un subset deschis și în rolele de pe submulțimea închisă, ci în loc de un șanț deschis și de un sistem deschis care este completarea complementului său. Aș fi de acord că probabil acest lucru are mai mult în comun cu pătratele de trasare aritmetică decât cu ciclurile de "dispariție" obișnuite.
adăugat autor Stephen Pellicer
Răspuns rău! mică confuzie: sunt teoriile de cohomologie presupuse a fi sheaves quasicoherent? Eu cer, pentru că ciclurile de dispariție sunt de obicei pentru coeficienții $ \ ell $ -adic și nu știu dacă există o teorie (de sens) a ciclurilor de dispariție a sheavei quasicoherent.
adăugat autor SGP

Nu aș merge atât de departe încât să spun că înțeleg, dar ceea ce am de la ea este următoarea: Se poate considera că functorul de cicluri de dispariție este considerat ca fiind derivat din lipirea datelor pentru recoltarea asociată fibrei singulare. Aceasta este o piesă foarte generală de gadgeturi (așa cum este localizarea lui Bousfield) și o putem vedea ca o versiune generală a functorului ciclurilor de dispariție. Dacă, de altfel, nu se poate prepara doar o versiune a grupului fundamental, care corespunde functorilor fibroza omologi și automorfismelor lor, dar și asociază informații cu piesele și incluziunile deschise, se poate spera să o vezi într-un mod rezonabil, deoarece monodromul în jurul localizării lui Bousfield dă ridicați functorul ciclurilor de dispariție. Acest lucru ar permite definirea unor izomorfisme monodromice și a celorlalte biți pe care ar trebui să le aibă ca parte a formalismului (și ar putea fi, de fapt, necesară și pentru a da definiția corectă a functorului ciclurilor de dispariție).

Poate că acest lucru este greșit greșit, dar dacă sperăm că va motiva pe cineva să mă corecteze și pot elimina acest lucru!

2
adăugat

Git nu este mai bună decât subversiunea. Dar nu este și mai rău. E diferit.

Diferența esențială este că este descentralizată. Imaginați-vă că sunteți un dezvoltator pe drum, pe care îl dezvoltați pe laptopul dvs. și doriți să aveți controlul sursei, astfel încât să vă puteți întoarce 3 ore.

Cu Subversion, aveți o problemă: Depozitul SVN poate fi într-o locație unde nu puteți ajunge (în compania dvs. și nu aveți internet în acest moment), nu vă puteți angaja. Dacă doriți să faceți o copie a codului dvs., trebuie să îl copiați sau să îl lipiți literalmente.

Cu Git, nu aveți această problemă. Copia dvs. locală este un depozit și vă puteți angaja și puteți beneficia de toate avantajele controlului sursei. Când recâștigi conectivitatea la depozitul principal, poți să te angajezi împotriva acestuia.

Acest lucru arată bine la început, dar trebuie doar să țineți cont de complexitatea adăugată a acestei abordări.

Git pare a fi lucrul "nou, strălucitor, răcoros". Nu este deloc rău (există un motiv pentru care Linus a scris-o pentru dezvoltarea Kernel-ului Linux, la urma urmei), dar simt că mulți oameni sară pe trenul "Distributed Source Control" doar pentru că este nou și este scris de Linus Torvalds, știind de ce / dacă este mai bine.

Subversiunea are probleme, dar și Git, Mercurial, CVS, TFS sau orice altceva.

Edit: So this answer is now a year old and still generates many upvotes, so I thought I'll add some more explanations. In the last year since writing this, Git has gained a lot of momentum and support, particularly since sites like GitHub really took off. I'm using both Git and Subversion nowadays and I'd like to share some personal insight.

Mai întâi, Git poate fi într-adevăr confuz la început atunci când lucrează descentralizat. Ce este o telecomandă? și cum să configurați corect magazia inițială? sunt doua intrebari care apar la inceput, mai ales in comparatie cu "svnadmin create" de la SVN, "git init" de la Git poate lua parametrii - bara si - partajata, ceea ce pare a fi modalitatea "buna" repertoriu. Există motive pentru aceasta, dar aceasta adaugă complexitate. Documentația comenzii "checkout" este foarte confuză pentru oamenii care se schimbă - "calea" propriu-zisă pare a fi "clona git", în timp ce "git checkout" pare să schimbe filialele.

Git REALY strălucește când sunteți descentralizat. Am un server acasă și un laptop pe drum, iar SVN pur și simplu nu funcționează bine aici. Cu SVN, nu pot avea control local al sursei dacă nu sunt conectat la depozit (Da, știu despre SVK sau despre modalitățile de copiere a repo). Cu Git, acesta este modul implicit oricum. Este o comandă suplimentară deși (git commit se angajează local, în timp ce master-ul de origine push push împinge sucursala master la telecomanda numită "origine").

Așa cum am spus mai sus: Git adaugă complexitatea. Două moduri de a crea depozite, checkout vs. clone, comitere vs. împingere ... Trebuie să știți care comenzi lucrează local și care lucrează cu "serverul" (presupun că majoritatea oamenilor încă mai doresc un "master-repository" ).

De asemenea, sculele sunt încă insuficiente, cel puțin pe Windows. Da, există un Visual Studio AddIn, dar încă mai folosesc git bash cu msysgit.

SVN are avantajul că este mult mai simplu de învățat: există repozitoriul dvs., toate schimbările spre acesta, dacă știți cum să creați, să comiteți și să faceți checkout și sunteți gata să mergeți și puteți prelua lucruri cum ar fi ramificarea, actualizarea etc. pe.

Git are avantajul că este mult mai potrivit dacă unii dezvoltatori nu sunt întotdeauna conectați la depozitul principal. De asemenea, este mult mai rapid decât SVN. Și din ceea ce aud, sprijinirea ramificării și a fuzionării este mult mai bună (ceea ce este de așteptat, deoarece acestea sunt motivele principale pe care le-a scris).

De asemenea, acest lucru explică de ce câștigă atâtea buzunare pe Internet, deoarece Git este perfect potrivit pentru proiectele Open Source: purtați-l doar, comutați modificările pe propria dvs. furcă și apoi întrebați-l pe inițiatorul de proiect inițial să vă tragă schimbările. Cu Git, asta funcționează. Într-adevăr, încercați-l pe Github, este magic.

Ceea ce văd, de asemenea, sunt Podurile Git-SVN: Repozitoriul central este un Repo de subversiune, dar dezvoltatorii lucrează local cu Git, iar podul apoi își împinge schimbările la SVN.

Dar chiar și cu această adăugare îndelungată, stau în continuare după mesajul meu principal: Git nu este mai bine sau mai rău, este diferit. Dacă aveți nevoie de "controlul sursei offline" și dorința de a învăța ceva timp în plus, este fantastic. Dar dacă aveți un Control Sursă strict centralizat și / sau încercați să introduceți sursa de control în primul rând pentru că colegii dvs. nu sunt interesați, atunci simplitatea și excelenta sculă (cel puțin pe Windows) a SVN strălucește.

0
adăugat
Nu, nu ai făcut-o. Un Ferrari este impractic, scump, sete și nu te va face mai bine de la A la B dacă locuiești într-un oraș ca New York sau Paris - aș prefera un Hyundai pentru multe locuri, de asemenea pentru că o zgârietură este mult mai puțin severă. Dar pentru fiecare dintre ei - un Ferrari are (foarte putine) avantaje, de asemenea ...
adăugat autor Michael Stum
Aceasta este concluzia dacă ați cheltuit cu adevărat un timp investigând-o și dacă aveți instrumentele necesare pentru aceasta (Sigur, trebuie să cunoașteți toate instrumentele din linia de comandă ale CVS-ului dvs., dar asta nu înseamnă că oamenii chiar le place să le folosească tot timpul ). Așa cum am spus, mulți oameni (știu) au spus Git = Bun pentru că Linus
adăugat autor Michael Stum
@sebnow Mă refeream la git init vs. git init --bare
adăugat autor Michael Stum
@hasen Numai dacă depășiți curba de învățare mult mai abruptă. Îl iubesc absolut, dar în medii în care încă mai trebuie să vindeți conceptul de control al surselor pentru programele dev (care, de cele mai multe ori, înseamnă un magazin de dezvoltare Windows), instrumentele superioare și simplitatea SVN bate pur și simplu git cu kilometri. Dacă (și asta este un "if", nu un "când") devs-ul dvs. utilizează într-adevăr Sursa de Control, atunci git poate începe să strălucească. Nu aș folosi din nou SVN, dar o mulțime de oameni nu ar folosi niciodată Git dacă nu se integrează corect în instrumentele
adăugat autor Michael Stum
Am facut cateva adaugari, pe masura ce ultimele 12 luni mi-au vandut cu adevarat pe Git. Este încă o curbă foarte abruptă de învățare, iar sculătura nu este chiar foarte bună pe Windows, dar odată învățată este excelentă. Nu vreau să sune ca un agent de publicitate, dar seria Mastering Git a lui TekPub ma ajutat să înțeleg, în special ceea ce este greu și esențial (despre mine) "Cum funcționează remotecii".
adăugat autor Michael Stum
Experiențele mele cu git nu sunt tocmai o "revelație care se schimbă în viață". Consider că este o unealtă excelentă atunci când funcționează, când atunci când nu se simte mai degrabă nefolosită. Nu am fost prea impresionat de depanare chestii ca Întrebarea 1052882, și chiar dacă aceasta este în mod clar o problemă RTFM: Consider că git (și orice alte distribuite VCS) să fie mai complicate decât cele centralizate, și aș lua în considerare utilizarea în medii centralizate . Dar, din nou, sunt în principal dezvoltator de Windows, iar instrumentele sunt încă imature pe Windows comparativ cu SVN.
adăugat autor Michael Stum
@dana Prefer, de asemenea, o Hayabusa = x
adăugat autor Pavel Radzivilovsky
@Michael: Ce este diferit în ceea ce privește software-ul este că clonarea nu costă nimic (aproape). Prin urmare, doar un design are dreptul de a trăi. Nu există practic nicio piață de împărțit, motiv pentru care nu este ca mașinile.
adăugat autor Pavel Radzivilovsky
Git nu pare complicat. Durează câteva minute pentru a afla cum să o utilizați, dacă aveți instrucțiuni pas cu pas. Și are un sprijin deosebit pe site-uri precum GitHub și Overflow de stive.
adăugat autor B Seven
Puteți găzdui un server svn pe calculatorul local?
adăugat autor bevacqua
@Michael Stum: "Git este greu" meme este total un mit. Mi se pare git să fie mult mai ușor decât svn. Nu am înțeles niciodată subversiunea; git are sens. Deși sunt de acord cu tine, poate fi un pic mai greu de vândut tipilor de ferestre.
adăugat autor hasen
Sunt uimit că acesta este răspunsul votat de sus! (AFAICT de la afecțiunea gitados) git nu este doar svn cu offline - este o nouă descoperire care schimbă viața. Bănuiesc că acest lucru a fost votat de către fanii SVN de faptul că au auzit despre cât de mare este git.
adăugat autor Paul Biggar
Analizați doar aspectul distribuției în comparație. Îți spun de ce. Pentru că doriți să partajați numai codul. Git și SVN sunt mai mult decât atât, ați etichetat vreodată, ramificați, fuzionat, rezolvat conflicte, copiați patch-uri între filiale? Cred că analiza ta este doar defectuoasă. În aceste aspecte, git este un instrument puternic. Ca să nu mai vorbim de lucrurile pe care le poate face, și SVN nu poate, cum ar fi squashing, disecting, ammending, rebasing, cireș-picking, și mult mai multe lucruri.
adăugat autor mschonaker
Newflash: Persoane diferite de dezvoltatori folosesc sisteme de control al reviziilor. Uite, eu sunt sigur ca git este a doua venire, dar ca un svn admin, avem non-dezvoltatori folosindu-l (mai ales prin TortoiseSVN), si sunt 99% sigur ca daca dezvoltatorii nostri au cerut git, 2 sisteme de control de revizie în loc de unul. Ca o parte: câte sisteme de urmărire a problemelor și bug-urilor permit configurarea mai multor RCS?
adăugat autor si618
De asemenea, cred că advocacy GIT ar putea lua acest lucru la inimă. Puteți să ciocniți pe principii și cine îl folosește de ani de zile, dar după prima dată când este filtrat. Ar putea folosi o explicație mai practică (cum ar arata de obicei fluxul de lucru) în loc de discuțiile abstracte.
adăugat autor Marco van de Voort
Îmi pare rău, dar trebuia să-i dau lui un vot în jos. Nu prea într-adevăr, și nici argumente bune, plus mashup confuz de clone și checkout, care sunt două operațiuni complet diferite!
adăugat autor gilligan
Când oamenii spun că Git este mai rapid decât Subversion, compară elementele de check-in locale Git cu check-inurile de la distanță? Asta nu pare o comparație corectă, deoarece verificările locale nu sunt în depozitul central pentru alții să vadă și nu vor fi susținute dacă copia dvs. locală este coruptă sau pierdută cumva ...
adăugat autor Chris Jaynes
Git este mai bun decât svn. Obiectiv. Faptic. Oricine afirmă altfel fie nu știe git și încearcă să raționalizeze evitarea investiției pentru ao învăța sau pur și simplu este irațional în ceea ce privește evaluarea deoarece are legături emoționale cu SVN.
adăugat autor Charlie Flowers
Trebuie remarcat faptul că Jira permite mai mult de un depozit și mai mult de un tip de repo care să fie configurat la un moment dat pentru cei care sunt interesați sau au nevoi diferite de control al revizuirii.
adăugat autor krystan honour
Distribuția nu este singura diferență dintre Subversion și Git. De asemenea, nu adaugă nici o complexitate decât dacă folosiți mai multe depozite. Există avantajele multor utilizări ale lui Git în loc de Subversiune, dar numai câteva (mai ales nesemnificative) dezavantaje. Git este folosit pentru că este bun, nu strălucitor.
adăugat autor sebnow
OP pare să fie confuză cu privire la Git sau am o neînțelegere. Nu există "două moduri de creare a repo", git clone ~~ svn co , git push / code>, git comitează ~~ svn add / rm / etc . Git este dificil de învățat numai dacă aveți preconcepții despre cum funcționează VCS. Am inceput cu mercurial, m-am dus la git, si a trebuit sa invat SVN. Ghici care a fost cel mai greu de folosit? SVN! Am început să folosesc git-svn deoarece SVN este atât de oribil. Nu este nimic "corect" despre modul în care SVN folosește termenul "c
adăugat autor sebnow
Ah, în acest caz aș asuma svnadmin create ~~ git init --bare . Singura diferență dintre - goală și normală este că un repo normal are un director de lucru (fișierele sunt verificate). Acesta este, de obicei, utilizat numai ca un server / depozit central și poate fi ignorat de utilizatorul tipic. În acest sens, SVN are "două" căi de a crea și repo; svnadmin crea și svn co .
adăugat autor sebnow
Va trebui să arunc în aer mulțimea "Git și / sau Hg este o revelație schimbătoare de viață". IMO, git> svn, hg> svn, git == hg. Subversiunea utilizează un model intern rupt în mod inerent pentru repozitoriul său.
adăugat autor haydenmuhl
@Gilligan, sunt de acord. Singurul lucru bun despre acest răspuns am găsit: este corect din punct de vedere politic ("nu mai bine / nu mai rău, doar diferit").
adăugat autor inger
Întrebarea a fost "De ce este mai bine?", Iar răspunsul cel mai ridicat (și selectat) începe cu "Git nu este mai bun". Hilar.
adăugat autor Mark Beckwith
Un Ferrari nu este mai bun decât un Hyundai. Dar nu este și mai rău. E diferit. (Ce? Nu te uita în felul ăsta ... Am spus ceva greșit?)
adăugat autor F.D.Castel
@ steve314: Ne pare rău pentru răspunsul târziu. Tipul de femeie care este impresionat de mașina dvs. sau de alegerea VCS este puțin adâncă și este susceptibilă să fie o întreținere ridicată. Te va lăsa într-o bătaie de inimă pentru un tip cu un VCS cu încurcătură cuantică, care va face disponibilă instantaneu toate copiile.
adăugat autor Hugh Brackett

Cu Git, poți face practic ceva offline, pentru că toată lumea are un depozit propriu.

Efectuarea de sucursale și fuzionarea între filiale este foarte ușoară.

Chiar dacă nu aveți drepturi de angajare pentru un proiect, puteți avea în continuare propriul depozit online și puteți publica "cereri de împingere" pentru patch-urile dvs. Toți cei cărora le plac patch-urile pot să-i aducă în proiect, inclusiv pe cei care se ocupă de întreținerea oficială.

Este banal să furci un proiect, să-l modificați și să continuați să fuzionați în bugfix-urile din ramura HEAD.

Git funcționează pentru dezvoltatorii kernel-ului Linux. Asta inseamna ca este foarte rapid (trebuie sa fie), si scala la mii de contribuabili. Git utilizează, de asemenea, mai puțin spațiu (până la de 30 de ori mai puțin spațiu pentru depozitul Mozilla).

Git este foarte flexibil, foarte TIMTOWTDI (Există mai multe moduri de a face acest lucru). Puteți folosi orice flux de lucru doriți și Git o va sprijini.

În cele din urmă, GitHub , un site minunat pentru găzduirea depozitelor dvs. Git.

Dezavantaje ale lui Git:

  • este mult mai greu de învățat, deoarece Git are mai multe concepte și mai multe comenzi.
  • Revizuirile nu au numere de versiune ca în subversiune
  • multe comenzi Git sunt criptice, iar mesajele de eroare sunt foarte nepotrivite de utilizatori
  • îi lipsește o interfață grafică bun (cum ar fi marele TortoiseSVN )
0
adăugat
Două gui bune pe care le știu sunt gitx (Mac) și gitg - foarte frumos.
adăugat autor Michael Durrant
+1 pentru mine. Cred că o mulțime de dezvoltatori uită că git lipsește ceva de genul TortoiseSVN și că nu numai dezvoltatorii folosesc controlul versiunii. M-am trezit la gândul de a trebui să explic (și să susțin) distribuirea controlului versiunii către non-dezvoltatorii noștri folosind SVN | TortoiseSVN!
adăugat autor si618
un alt dezavantaj - trebuie să aveți o copie completă a depozitului, nu puteți lucra la partiale (ceea ce contează dacă aveți cele uriașe, cum ar fi o mulțime de corporații)
adăugat autor gbjbaanb
Sunt de acord. Folosesc atât SVN cât și GIT (de la aproximativ 6 luni). Îmi place sincer mult mai mult decât am făcut vreodată SVN. Este nevoie de timp pentru a învăța. Cel mai mare salt pentru mine (în momentul în care am văzut lumina: P) a fost când mi-am dat seama că trebuie să nu mai încerc să folosesc GIT așa cum a lucrat SVN. Apoi, totul a căzut;
adăugat autor Blizz
Deși învățarea tuturor Git ar fi mult mai dificilă, elementele de bază sunt aproape identice. Domeniul de învățare nu este într-adevăr atât de abrupt până când nu intri în lucrurile mai avansate, pe care SVN nu le poate face oricum.
adăugat autor sebnow
Sunt utilizator SVN, dar încercați acest lucru: code.google.com/p/tortoisegit
adăugat autor DiGi
Îmi place git, dar mi-a luat aproximativ șase luni de utilizare zilnică pentru ao folosi efectiv. Acestea fiind spuse, folosesc o combinație a shell-ului git (prompt de comandă) de la msysgit, git gui și gitk din msysgit și TortoiseGit. Cred ca TortoiseGit este grozav, dar nu inteleg de ce mai multi oameni nu-l folosesc. Știu că susținătorii msysgit rănesc TortoiseGit din diverse motive, unele dintre ele ideologice, și asta ar putea avea ceva de-a face cu asta. TortoiseGit este un secret bine păstrat!
adăugat autor Jim Raden

Este vorba despre ușurința utilizării / pașii necesari pentru a face ceva.

Dacă dezvolt un singur proiect pe PC / laptop, git este mai bun, pentru că este mult mai ușor de configurat și folosit. Nu aveți nevoie de un server și nu trebuie să continuați să introduceți URL-ul repository în momentul în care faceți o fuziune.

Dacă ar fi doar 2 persoane, aș spune că git este și mai ușor, pentru că poți doar împinge și trage de la alții.

Odată ce ați trecut dincolo de asta, aș merge pentru subversiune, pentru că în acel moment trebuie să înființezi un server dedicat sau locație.

Puteți face acest lucru la fel de bine cu git ca și cu SVN, dar beneficiile lui git depășesc nevoia de a face pași suplimentari pentru a se sincroniza cu un server central. În SVN tocmai ai comite. În git trebuie să faci comiterea, apoi să împingi. Pasul suplimentar devine enervant pur și simplu pentru că ați terminat să o faceți atât de mult.

SVN are, de asemenea, avantajul unor instrumente GUI mai bune, însă ecosistemul git pare să se prăbușească repede, așa că nu mă voi preocupa în acest sens pe termen lung.

0
adăugat
Argumentul "topic branch for experimentation" este adesea prezentat în favoarea lui Git, dar sincer, nu am văzut niciodată pe nimeni de fapt în subversiune sau în alt sistem non-DVCS. Poate că este o afacere mare și cu toții ne lipsește, dar din ceea ce am văzut, 99% dintre dezvoltatori (inclusiv eu) nu le pasă de ramificațiile tematice pentru că nu le folosesc niciodată! - Nu poti sa pierzi ceea ce n-ai avut niciodata :-). Cred că dacă oamenii DVCS vor prezenta "ramuri de subiect" ca o caracteristică, aceștia trebuie să-i convingă pe toți că aceste lucruri sunt de fapt utile.
adăugat autor Orion Edwards
"Lucrările de împărțire în mici comitete", este din nou ceva care pare a fi frumos în teorie. Dar, în ultimii 3 ani, nu m-am gândit vreodată "oh, aș vrea să pot face acest lucru" și mă lupt să mă gândesc chiar și la o situație ipotetică în care aș putea dori această caracteristică. .. Mulți dintre avocații git / DVCS spun pur și simplu că "avem X și X este minunat" și toți ceilalți stau acolo întrebându-se de ce au avut vreodată nevoie de X
adăugat autor Orion Edwards
Separarea comiterii de la publicarea în Git este avantajul IMHO, mai degrabă decât dezavantajul.
adăugat autor Jakub Narębski
Ok, așa cum ați evalua "ușurința de utilizare / pașii necesari pentru a face ceva" pentru SVN atunci când: - a face o ramură de subiect pentru experimentare - a îmbina această ramură într-o altă ramură - a împărți lucrurile editate într-un fișier în propriile comitete mici - verificând rapid o ramură principală pentru a face o mică remediere IMHO Nu văd cum configurarea unui server SVN este mai ușoară decât configurarea serverului dvs. git. Și de ce ați vrea să renunțați la toate avantajele pe care le obțineți de la ramurile ușoare doar pentru a nu "trebuie să împingeți separat".
adăugat autor Sam

Ei bine, este distribuit. Indicatorii de referință indică faptul că este considerabil mai rapid (dat fiind natura sa distribuită, operațiile precum dife-urile și jurnalele sunt toate locale, astfel încât, desigur, este rapid mai rapid în acest caz), iar dosarele de lucru sunt mai mici (ceea ce mi-a lovit încă mintea).

Când lucrați la subversiune sau la orice alt sistem de control al versiunilor client / server, creați în mod esențial copii de lucru pe aparatul dvs. prin revizuiri check-out . Aceasta reprezintă o imagine instantanee a ceea ce arata depozitul. Actualizați copia de lucru prin intermediul actualizărilor și actualizați depozitul prin comitete.

Cu un control al versiunii distribuite, nu aveți un instantaneu, ci mai degrabă întregul cod de bază. Vrei să faci o diff cu o versiune veche de 3 luni? Nicio problemă, versiunea veche de 3 luni este încă pe calculatorul dvs. Acest lucru nu înseamnă numai că lucrurile sunt mult mai rapide, dar dacă sunteți deconectat de la serverul central, puteți să efectuați multe dintre operațiile cu care sunteți obișnuit. Cu alte cuvinte, nu aveți doar un instantaneu al unei revizuiri date, ci întreaga bază de coduri.

Ai crede că Git ar ocupa o grămadă de spațiu pe harddrive, dar dintr-un cuplu de referință pe care l-am văzut, este de fapt mai puțin. Nu mă întreba cum. Adică, a fost construit de Linus, știe un lucru sau două despre sistemele de fișiere pe care le presupun.

0
adăugat
Cauza de ce Git poate dura mai puțin spațiu pe disc pentru depozit completă decât Subversion pentru simpla de verificare este că magazinele Subversion „copie curat“ pentru a face „dif SVN“ (cu ultima versiune de comparație) de lucru ... și că depozitul git este comprimat (și deltaified ).
adăugat autor Jakub Narębski
Nu sunt surprins că "folderele de lucru" (adică repo) sunt mai mici decât exemplarele de lucru svn deoarece chiar și reposurile svn sunt mai mici decât exemplarele de lucru svn.
adăugat autor R. Martinho Fernandes

Datorită faptului că nu are nevoie să comunice în mod constant cu un server central, aproape orice comandă rulează în mai puțin de o secundă (evident, push / pull / fetch sunt mai lente pentru că trebuie să initalizeze conexiunile SSH). Brancharea este mult mai ușoară (o comandă simplă pe ramură, o comandă simplă de îmbinare)

0
adăugat

Google Tech Talk: Linus Torvalds pe git

http://www.youtube.com/watch?v=4XpnKHJAok8

Pagina de comparare a Git Wiki

http://git.or.cz/gitwiki/GitSvnComparsion

0
adăugat
Mă bucur că videoclipul lui Linus Torvalds, dar el implică faptul că git este distribuit, nu centralizat, iar acest lucru este doar greșit. Poate fi folosit într-un mod distribuit, SAU într-un mod centralizat. Puteți avea un depozit central la care se angajează toată lumea, la fel ca în SVN. Doar că nu trebuie să faci așa.
adăugat autor MatrixFrog
@MatrixForog: Cred că în acest caz, "descentralizat" nu este opusul "centralizat", ci chiar un superset. Este vorba de "mobil" și "imobil" - doar pentru că ceva este "mobil", nu-mi vine să stau liniștit.
adăugat autor Tikhon Jelvis
Și asta e destul de frumos. Ea de la unul dintre comiterii git și explică multe caracteristici avansate, cum ar fi împărțirea comitetelor mari în cele mai mici. youtube.com/watch?v=j45cs5_nY2k
adăugat autor schoetbi
Discuția lui Linus este distractiv de privit. El rupe brutal sisteme centralizate de control al versiunilor precum Subversion și CVS. Totuși, vorbirea lui Randal Schwartz " youtube.com/watch?v=8dhZ9BXQgc4 este mai constructivă , mai informativ și mai convingător.
adăugat autor bendin

Unul dintre lucrurile despre SubVersion care ma irks este că pune propriul folder în fiecare director al unui proiect, în timp ce git pune doar unul în directorul rădăcină. Nu este mare de o afacere, dar lucruri mici, cum ar fi asta se adaugă.

Desigur, SubVersion are Tortoise, care este [de obicei] foarte frumos.

0
adăugat
ds .svn va fi plecat în curând, probabil cu v1.7
adăugat autor gbjbaanb

Aceasta este întrebarea greșită. Este prea ușor să se concentreze asupra verucii lui Git și să formuleze un argument în legătură cu motivul pentru care subversiunea este evident mai bună, cel puțin pentru unele cazuri de utilizare. Faptul că git a fost conceput inițial ca un set de construcție pentru controlul versiunilor de nivel scăzut și care are o interfață barocă orientată spre linux-dezvoltator, face mai ușor pentru războaiele sfinte să câștige tracțiunea și legitimitatea percepută. Suporterii Git bate tamburul cu milioane de avantaje de flux de lucru, pe care tipii de la svn le proclamă inutile. Destul de curând, întreaga dezbatere este încadrată ca centralizată vs distribuită, care servește intereselor comunității de întreprinderi svn. Aceste companii, care de obicei au prezentat cele mai convingătoare articole despre superioritatea subversiunii în cadrul întreprinderii, depind de insecuritatea percepută a git și de pregătirea întreprinderii svn pentru succesul pe termen lung al produselor lor.

Dar aici este problema: Subversiunea este un mortar arhitectural .

În timp ce puteți să luați git și să construiți un înlocuitor centralizat de subversiune destul de ușor, în ciuda faptului că ați fost în jur de mai mult de două ori mai mult, SVN nu a reușit niciodată să obțină chiar și o bază de urmărire a fuzionării oriunde în zonă, precum și în git. Un motiv de bază pentru aceasta este decizia de proiectare de a face sucursalele la fel ca și directoarele. Nu știu de ce s-au dus inițial în această direcție, cu siguranță verificările parțiale sunt foarte simple. Din păcate, de asemenea, este imposibilă urmărirea corectă a istoricului. Acum, evident, ar trebui să folosiți convențiile de structură a depozitului de subversiune pentru a separa ramurile de directoarele obișnuite, iar svn folosește unele euristici pentru a face lucrurile să funcționeze pentru cazurile de utilizare zilnică. Dar toate acestea se referă doar la o decizie foarte slabă și limitată de proiectare la un nivel scăzut. Fiind capabil să facă o difuzare de tip repository (mai degrabă decât diff directorul) este funcționalitatea de bază și critică pentru un sistem de control al versiunii și simplifică foarte mult interiorul, făcând posibilă construirea de caracteristici mai inteligente și utile în plus. Puteți vedea în cantitatea de efort care a fost pusă în extinderea subversiunii și totuși cât de mult se află în spatele ei din actuala recoltă de VCSe moderne în termeni de operațiuni fundamentale, cum ar fi rezolvarea fuzionării.

Acum, iată sfatul meu inimii și agnostic pentru oricine crede încă că subversiunea este suficient de bună pentru viitorul previzibil:

Subversiunea nu va ajunge niciodată la rasele mai noi de VCS care au învățat din greșelile RCS și CVS; este o imposibilitate tehnică dacă nu reutilizează modelul depozitului de la sol, dar atunci nu ar fi cu adevărat SVN? Indiferent de cât de mult credeți că nu aveți capacitățile unui VCS modern, ignoranța dvs. nu vă va proteja de capcanele subversiunii, dintre care multe sunt situații imposibile sau ușor rezolvate în alte sisteme.

Este extrem de rar ca inferioritatea tehnică a unei soluții să fie atât de limpede ca și în cazul lui svn, cu siguranță nu aș spune niciodată o astfel de opinie despre win-vs-linux sau emacs-vs-vi, dar în acest caz este așa clarcut și controlul sursei este un instrument fundamental în arsenalul dezvoltatorului, care simt că trebuie să fie declarat fără echivoc. Indiferent de cerința de a folosi svn din motive organizaționale, implor tuturor utilizatorilor SVN să nu-și lase mintea logică să construiască o credință falsă că mai multe VCS-uri moderne sunt utile numai pentru proiecte mari open-source. Indiferent de natura muncii dvs. de dezvoltare, dacă sunteți un programator, veți fi un programator mai eficient dacă învățați cum să utilizați VCS-uri mai bine proiectate, indiferent dacă acestea sunt Git, Mercurial, Darcs sau multe altele.

0
adăugat

Git face, de asemenea, ramificația și fuzionarea cu ușurință. Subversion 1.5 a adăugat doar urmărirea fuzionării, dar Git este încă mai bună. Cu ramificația Git este foarte rapidă și ieftină. Aceasta face ca crearea unei ramificații pentru fiecare caracteristică nouă să fie mai fezabilă. Bazele de stocare Git și Git sunt foarte eficiente cu spațiu de stocare în comparație cu Subversion.

0
adăugat

Câteva răspunsuri au făcut aluzie la acestea, dar vreau să fac 2 puncte explicite:

1) Capacitatea de a face comiteri selective (de exemplu, git add --patch ). Dacă directorul dvs. de lucru conține mai multe modificări care nu fac parte din aceeași modificare logică, Git face foarte ușor efectuarea unei comitete care include doar o parte din modificări. Cu Subversion, este dificil.

2) Abilitatea de a comite fără a face public schimbarea. În Subversiune, orice comitere este imediat publică, deci irevocabilă. Acest lucru limitează foarte mult capacitatea dezvoltatorului de a se "angaja devreme, comite adesea".

Git este mai mult decât un VCS; este, de asemenea, un instrument pentru dezvoltarea patch-urilor. Subversiunea este doar un VCS.

0
adăugat
@schoetbi Nu, șeful depozitului este așa cum a fost înainte. Depozitul propriu-zis conține acum două comitete, în timp ce ar fi bine dacă nici unul dintre ei nu ar fi fost acolo. Este o aglomerație extra care te încetinește când te uiți prin bușteni. Desigur, acest lucru se poate întâmpla și cu git, mai ales dacă unii dezvoltatori au obiceiul de a împinge imediat după comiterea lor. Dar este mult mai ușor de evitat în git.
adăugat autor MatrixFrog
Re 1) Dacă utilizați TortoiseSVN, AnkhSVN, etc., atunci este foarte ușor (trivial) să selectați fișierele cu modificări de comitet. Re 2) Dacă nu doriți ca alți dezvoltatori să obțină codul dvs., creați o ramură și apoi fuzionați când este gata, nu este greu.
adăugat autor si618
irevocabil? Ei bine, ai putea inversa fuziona comiterea defectuoasă și depozitul este așa cum a fost înainte. Dar ai dreptate că este documentată. Dar este bine sau rău? Cred că depinde ...
adăugat autor schoetbi

În primul rând, controlul versiunii concurente pare ca o problemă ușoară de rezolvat. Nu e deloc. Oricum...

SVN este destul de non-intuitivă. Git este și mai rău. [speculații sarcastice] Acest lucru se datorează faptului că dezvoltatorii, care, la fel ca problemele dificile, cum ar fi controlul versiunilor concurente, nu au mare interes să facă un UI bun. [/ Sarcastic-speculații]

Suporterii SVN cred că nu au nevoie de un sistem distribuit de control al versiunii. M-am gândit și la asta. Dar acum, când folosim exclusiv Git, sunt un credincios. Acum, versiunea de control funcționează pentru mine și echipa / proiect în loc de a lucra doar pentru proiect. Când am nevoie de o ramură, eu am ramură. Uneori este o ramură care are o ramură corespunzătoare pe server și uneori nu o face. Să nu mai vorbim de toate celelalte avantaje pe care va trebui să le studiez (datorită, în parte, lipsei arcane și absurde a UI, care este un sistem modern de control al versiunilor).

0
adăugat

Toate răspunsurile sunt așa cum era de așteptat, programator centric, dar ce se întâmplă dacă compania dvs. utilizează controlul reviziilor în afara codului sursă? Există o mulțime de documente care nu sunt cod sursă care beneficiază de controlul versiunilor și ar trebui să trăiască aproape de cod și nu în alt CMS. Majoritatea programatorilor nu lucrează în mod izolat - lucrăm pentru companii ca parte a unei echipe.

Având în vedere acest lucru, comparați ușurința de utilizare, atât în ​​instruirea clientului, cât și în formarea profesională, între Subversion și git. Nu văd un scenariu în care orice distribuit sistemul de control al revizuirilor va fi mai ușor de utilizat sau ar putea fi explicat unui programator non-programator. Mi-ar plăcea să fiu greșit, pentru că atunci aș fi capabil să evaluez git și să am o speranță că ar fi acceptat de oameni care au nevoie de control al versiunilor care nu sunt programatori.

Chiar și atunci, dacă am fi întrebat de conducere de ce ar trebui să ne mutăm dintr-un sistem centralizat de control al revizuirii distribuite, aș fi greu să dau un răspuns cinstit, pentru că nu avem nevoie de el.

Disclaimer: Am devenit interesat de Subversion devreme (în jurul valorii de v0.29), deci evident că sunt părtinitoare, dar companiile pentru care am lucrat încă de atunci beneficiază de entuziasmul meu pentru că am încurajat și sprijinit utilizarea sa. Bănuiesc că așa se întâmplă cu majoritatea companiilor de software. Cu atâția programatori care sărind pe banderola git, mă întreb câte companii vor pierde din beneficiile utilizării controlului versiunii în afara codului sursă? Chiar dacă aveți sisteme separate pentru diferite echipe, pierdeți unele dintre avantajele, cum ar fi integrarea de urmărire a problemelor (unificate), în timp ce creșteți cerințele de întreținere, hardware și instruire.

0
adăugat
Non-programatorii vor avea deja probleme cu subversiunea. Ar fi mult mai bine să le oferim o aplicație de publicare a documentelor care are controlul versiunii decât să folosească un svn-GUI. De ce nu scrieți documentele într-un wiki cu revizuiri. Există chiar și câteva git-uri care funcționează în jurul cărora se utilizează git ca spațiu de stocare a datelor. Programatorii ar trebui să aibă cel mai bun instrument pentru loc de muncă, și anume Git sau Hg din cauza libertății fluxului de lucru.
adăugat autor Keyo
De exemplu, vreau să spun integrarea în Windows (TortoiseSVN) și Visual Studio (AnkhSVN). Îmi place toți dezvoltatorii să meargă la linia de comandă în loc de un GUI frumos sau IDE? Ceea ce spun este că nu cred că poți spune categoric că git / Hg este cel mai bun instrument pentru această slujbă, pentru că dacă oamenii nu-i plac clientul VCS, nu vor folosi instrumentul, nu contează câtă libertate dă fluxul de lucru.
adăugat autor si618
@Keyo, da este adevărat că non-programatorii vor avea timp să obțină Subversion, dar cred că vor dura mai mult cu git sau Hg. Wiki-urile sunt minunate dacă se mențin, însă în experiența mea, dezvoltatorii sunt mai susceptibili să mențină documente legate de codul sursă dacă se află aproape de acel cod sursă. Sunt de acord cu faptul că nu există multe documente care se încadrează în această categorie, dar cu siguranță există. Este interesant să spui că git / Hg este cel mai bun instrument pentru această slujbă, este o declarație care nu este probabil adevărată pentru toate circumstanțele, git ș
adăugat autor si618
@inger Nu cred că puteți spune "acesta este singurul motiv valabil", suportul pentru AFAIK pentru Subversion este mult superior lui Git, de ex. TortoiseSVN și integrarea cu Visual Studio și Java IDE ca Eclipse. Aceasta poate să nu fie o problemă pentru dvs., dar este cu siguranță pentru noi. Nu am menționat-o în răspunsul meu, deoarece este o problemă separată.
adăugat autor si618
IMHO, acesta este singurul motiv valabil în favoarea SVN. Pe scurt, este mai ușor să explici unui non-programator, adică, cineva care se aștepta să o folosească în mod liniar și să evite scenarii complexe (= reale) de VC: conflicte, fuziuni în 3 direcții, ramuri. niciodată nu doriți să permiteți VCS să îmbine un fișier de prezentare PowerPoint oricum ..
adăugat autor inger
"Majoritatea programatorilor nu funcționează izolat" pare să sugereze că contabilii / oamenii de marketing ar trebui să folosească același repo în cazul în care codul sursă este păstrat. Nu văd beneficiile acestui lucru; unele dintre fostele mele companii au vrut să se standardizeze asupra unor astfel de lucruri, însă au eșuat în mod inevitabil. Cred că abordarea simplistă poate fi excelentă pentru manager, dar o simplificare prea mare pentru echipele de programatori - astfel, unificarea acestora duce la un compromis prost.
adăugat autor inger
Pentru documentele care merg cu software-ul, ai dreptate - ar trebui să fie versiuni împreună. Am descoperit că cei mult mai puțin decât oamenii cred inițial (am ajuns să aruncăm un copac copac uriaș de la sursa repo). De asemenea, există multe lucruri pe care le puteți face pentru a simplifica fluxurile de lucru ale scriitorilor de tehnologie, etc, dacă ar fi o problemă (nu ar trebui).
adăugat autor inger

Easy Git has a nice page comparing actual usage of Git and SVN which will give you an idea of what things Git can do (or do more easily) compared to SVN. (Technically, this is based on Easy Git, which is a lightweight wrapper on top of Git.)

0
adăugat

Eric Sink from SourceGear wrote series of articles on differences between distributed and nondistributed version controls systems. He compares pros and cons of most popular version control systems. Very interesting reading.
Articles can be found on his blog, www.ericsink.com:

0
adăugat

Lucrul amuzant este: Găsește proiecte în Subversion Repos, dar le accesez prin intermediul comenzii Git Clone.

Please read Develop with Git on a Google Code Project

Deși Google Code vorbește în mod nativ   Subversiune, puteți utiliza cu ușurință Git   în timpul dezvoltării. Căutarea pentru "git   svn "sugerează că această practică este   pe scară largă, și vă încurajăm și noi   pentru a experimenta acest lucru.

Utilizarea Git pe un depozit Svn îmi oferă avantaje:

  1. Pot lucra distribuit pe mai multe mașini, comiterea și tragerea de la și lor
  2. Am un spațiu de depozitare svn central backup / public pentru ca alții să se poată verifica
  3. Și sunt liberi să utilizeze Git pentru propriile lor
0
adăugat
acest lucru este un fel de date, codul Google nu mercurial, astfel încât nu mai este nevoie de acest hack
adăugat autor Sam Saffron
@Sam, cu excepția cazului în care se întâmplă să vă place git și / sau displace mercurial.
adăugat autor MatrixFrog

Locuiesc în ultima vreme în ținutul Git și îmi place pentru proiecte personale, dar nu aș putea schimba încă proiecte de lucru la Subversion, având în vedere schimbarea de gândire a personalului, fără niciun avantaj. Mai mult decât atât, cel mai mare proiect pe care-l executăm este extrem de dependent de svn: externals care, din ceea ce am văzut până acum, nu funcționează atât de bine și fără probleme în Git.

0
adăugat

" De ce Git este mai bun decât X " descrie diferitele avantaje și dezavantaje ale lui Git față de ceilalți CSM.

Scurt:

  • Git tracks content rather than files
  • Branches are lightweight și merging is easy, și I mean really easy.
  • It's distributed, basically every repository is a branch. It's much easier to develop concurrently și collaboratively than with Subversion, in my opinion. It also makes offline development possible.
  • It doesn't impose any workflow, as seen on the above linked website, there are many workflows possible with Git. A Subversion-style workflow is easily mimicked.
  • Git repositories are much smaller in file size than Subversion repositories. There's only one ".git" directory, as opposed to dozens of ".svn" repositories (note Subversion 1.7 și higher now uses a single directory like Git.)
  • The staging area is awesome, it allows you to see the changes you will commit, commit partial changes și do various other stuff.
  • Stashing is invaluable when you do "chaotic" development, or simply want to fix a bug while you're still working on something else (on a different branch).
  • You can rewrite history, which is great for preparing patch sets și fixing your mistakes (before you publish the commits)
  • ? și a lot more.

Există câteva dezavantaje:

  • There aren't many good GUIs for it yet. It's new și Subversion has been around for a lot longer, so this is natural as there are a few interfaces in development. Some good ones include TortoiseGit și GitHub for Mac.
  • Partial checkouts/clones of repositories are not possible at the moment (I read that it's in development). However, there is submodule support. Git 1.7+ supports sparse checkouts.
  • It might be harder to learn, even though I did not find this to be the case (about a year ago). Git has recently improved its interface și is quite user friendly.

În cea mai simplistă utilizare, Subversion și Git sunt aproape la fel. Nu există o mare diferență între:

svn checkout svn://foo.com/bar bar
cd bar
# edit
svn commit -m "foo"

și

git clone [email protected]:foo/bar.git
cd bar
# edit
git commit -a -m "foo"
git push

Where Git really shines is branching și working with other people.

0
adăugat
adăugat autor Zaz
@awe, care se numește urmărirea fișierelor. încercați să redenumiți fișierul sau să îl mutați altundeva manual [același conținut, fișier nou (datorită căii noi / numelui]]: va ști SVN că este același fișier și să păstreze revizuirile anterioare pe care le-ați făcut anterior? Nu, cred că nu.
adăugat autor Filip Dupanović
Spui că GIT urmărește conținutul mai degrabă decât fișierele. Am descoperit că SVN face și asta: am făcut modificări la un fișier și l-am salvat. SVN a arătat fișierul ca fiind roșu (modificat). Apoi am renunțat la editor și l-am salvat din nou. SVN a actualizat starea în verde (nu sa modificat), chiar dacă fișierul a fost modificat (schimbarea datei mai noi), dar SVN a recunoscut că conținutul nu a fost modificat față de original.
adăugat autor awe
nu modifică traseul în SVN în fișiere?
adăugat autor Seun Osewa

De ce cred că Subversion este mai bun decât Git (cel puțin pentru proiectele pe care lucrez), în principal din cauza utilizării sale și a fluxului de lucru mai simplu:

http://www.databasesandlife.com/why-subversion-is-de- mai bine decât git /

0
adăugat

I think Subversion is fine.. until you start merging.. or doing anything complicated.. or doing anything Subversion thinks is complicated (like doing queries to find out which branches messed with a particular file, where a change actually comes from, detecting copy&pastes, etc)...

Nu sunt de acord cu răspunsul câștigător, spunând că principalul beneficiu al GIT este offline - este cu siguranță util, dar este mai mult ca un extra pentru cazul meu de utilizare. SVK poate funcționa offline, totuși nu există nicio întrebare pentru mine care dintre ele să investească timpul meu de învățare).

Doar că este incredibil de puternic și rapid și, bine după obișnuință cu conceptele, este foarte util (da, în acest sens: ușor de utilizat).

For more details on a merging story, see this : Using git-svn (or similar) *just* to help out with an svn merge?

0
adăugat

Git și DVCS în general sunt excelente pentru dezvoltatorii care fac o mulțime de codare independent unul de celălalt, deoarece fiecare are propria sa ramură. Dacă aveți nevoie de o schimbare de la altcineva, ea trebuie să se angajeze la repo-ul local și apoi trebuie să împingă această schimbare la tine sau trebuie să o tragi de la ea.

De asemenea, raționamentul meu mă face să cred că DVCS face lucrurile mai dificile pentru QA și pentru managementul lansării, dacă faceți lucruri precum lansări centralizate. Cineva trebuie să fie responsabil pentru a face acea împingere / tragere din depozitul tuturor celorlalți, rezolvând orice conflict care ar fi fost rezolvat la momentul inițial al comiterii înainte, apoi făcând construirea și apoi dacă ceilalți dezvoltatori s-ar sincroniza repo.

Toate acestea pot fi abordate cu procese umane, desigur; DVCS tocmai a rupt ceva care a fost fixat de controlul versiunii centralizate, pentru a oferi unele facilități noi.

0
adăugat
De fapt, dacă arăți ca un kernel Linux sau un proiect git în sine este gestionat, veți vedea că Git este foarte bun pentru fluxul de lucru "single maintainer" (sau maintainer + lieutenants), cu unul central prin repozitoriul consenselor. Și face ușor să comutați temporar la altcineva ca un întreținător.
adăugat autor Jakub Narębski

Principalele puncte pe care le place despre DVCS sunt cele:

  1. Puteți comite lucruri sparte. Nu contează pentru că alte popoare nu le vor vedea până când nu veți publica. Timpul de publicare este diferit de timpul de angajare.
  2. Din această cauză vă puteți angaja mai des.
  3. Puteți îmbina funcționalitatea completă. Această funcționalitate va avea propria ramură. Toate comitetele acestei ramuri vor fi legate de această funcționalitate. Puteți face acest lucru cu un CVCS, cu DVCS însă implicit.
  4. Puteți căuta istoricul dvs. (găsiți când o funcție a fost modificată)
  5. Puteți anula o tragere dacă cineva înșurubă magazia principală, nu este nevoie să remediați erorile. Doar ștergeți fuzionarea.
  6. Când aveți nevoie de un control sursă în orice director, faceți: git init. și vă puteți angaja, anulați modificările, etc ...
  7. Este rapid (chiar și pe Windows)

Principalul motiv pentru un proiect relativ mare este comunicarea îmbunătățită creată de punctul 3. Altele sunt bonusuri plăcute.

0
adăugat
+1 "Poți comite lucruri sparte." este principalul motiv pentru care am în vedere trecerea la git din svn. Nu-mi place întotdeauna când sunt la mijlocul distanței de a dezvolta un bloc de cod greu, iar eu nu am plasa de siguranță a VCS (pur și simplu pentru că modificările mele nu funcționează încă, așa că nu am voie să se angajeze).
adăugat autor András Szepesházi
Multumesc, ai dreptate. Fix.
adăugat autor Emmanuel Caradec
Cred că punctul nr. 1 intenționează să spună că "alți oameni nu le vor vedea până când nu publicați " (sau "împingeți").
adăugat autor jackr

Subversiunea este încă un sistem de control al versiunilor mult mai folosit, ceea ce înseamnă că are o mai bună susținere a instrumentului. Veți găsi pluginuri mature SVN pentru aproape orice IDE și există extensii de explorare bune ( ca TurtoiseSVN). În afară de asta, va trebui să fiu de acord cu Michael : Git nu este mai bun sau mai rău decât Subversion , e diferit.

0
adăugat
Dar acum, după ce am folosit GIT extensiv de câțiva ani, trebuie să nu fiu de acord cu mine: Git este mai bun decât Subversion. Cel puțin odată ce treci peste sintaxa neprietenoasă a lui Git.
adăugat autor neu242

Alte raspunsuri au facut o treaba buna de a explica caracteristicile principale ale lui Git (care sunt minunate). Dar există și atâtea moduri mici în care Git se comportă mai bine și mă ajută să-mi păstrez viața mai sănătoasă. Iată câteva din lucrurile mici:

  1. Git has a 'clean' command. SVN desperately needs this command, considering how frequently it will dump extra files on your disk.
  2. Git has the 'bisect' command. It's nice.
  3. SVN creates .svn directories in every single folder (Git only creates one .git directory). Every script you write, and every grep you do, will need to be written to ignore these .svn directories. You also need an entire command ("svn export") just to get a sane copy of your files.
  4. In SVN, each file & folder can come from a different revision or branch. At first, it sounds nice to have this freedom. But what this actually means is that there is a million different ways for your local checkout to be completely screwed up. (for example, if "svn switch" fails halfway through, or if you enter a command wrong). And the worst part is: if you ever get into a situation where some of your files are coming from one place, and some of them from another, the "svn status" will tell you that everything is normal. You'll need to do "svn info" on each file/directory to discover how weird things are. If "git status" tells you that things are normal, then you can trust that things really are normal.
  5. You have to tell SVN whenever you move or delete something. Git will just figure it out.
  6. Ignore semantics are easier in Git. If you ignore a pattern (such as *.pyc), it will be ignored for all subdirectories. (But if you really want to ignore something for just one directory, you can). With SVN, it seems that there is no easy way to ignore a pattern across all subdirectories.
  7. Another item involving ignore files. Git makes it possible to have "private" ignore settings (using the file .git/info/exclude), which won't affect anyone else.
0
adăugat
Anunț. 7. Cu git modern puteți avea și setarea de ignorare "privată" pe utilizator, utilizând variabila de configurare core.excludesFile în ~ .gitignore (vezi om git-config).
adăugat autor Jakub Narębski
@Chris: Puteți să o faceți explicit: git mv și git rm .
adăugat autor R. Martinho Fernandes
Aș dori, de asemenea, să văd opțiunea unui singur director .svn pentru fiecare copie de lucru, dar pentru înregistrare: Pentru # 3: Majoritatea instrumentelor vor ignora (în mod implicit) directoarele .svn. Pentru # 6: Puteți seta proprietățile recursiv.
adăugat autor si618
Re # 5: În timp ce acest lucru este în mod normal adevărat, uneori Git nu șterge acest lucru. Cel puțin cu Subversion, problemele cauzate de mutare sau ștergere sunt aproape invariabil un PEBKAC. Deși este bine să ai o urmărire automată a mișcării / ștergerii, aș fi apreciat cel puțin capacitatea de a menționa în mod explicit ceea ce fac fișierele din depozit, chiar dacă nu trebuie să o folosesc.
adăugat autor Chris Charabaruk
3: directorul "un singur .svn" va fi aici cu SVN 1.7 când WC-NG este implementat. 1: Pentru a obține curățarea SVN, exportați în partea de sus a WC-ului. 5: nu este atât de ușor, dacă redenumiți un fișier nu îl recunoaște și păstrează istoricul, sau îl trateze ca o adăugare și ștergere în directorul ?. 6/7: svn are setările de ignorare globală pe client.
adăugat autor gbjbaanb
Eu unul nu-mi pasă prea mult de distribuirea lui Git. Dar tocmai din cauza acestor lucruri mici, # 3 și # 5, în special, am trecut la git.
adăugat autor CodesInChaos
Există svn-bisect. Este nefericită, dar este și funcționează.
adăugat autor sanmai
Re: # 3 "fiecare grep pe care il faci": ai nevoie de "ack": betterthangrep.com
adăugat autor janmoesen
M-am confruntat cu probleme # 4, # 6 și # 7 cu svn. +1 pentru indicarea acestora w.r.t. Git.
adăugat autor Sushant
Nu inteleg cum sunt # 3 si # 5 ambele adevarate ... se pare ca mine ca punctul de a avea un .svn in fiecare folder ar fi sa se miste fara probleme si cu o locatie centrala este mult mai greu de urmarit mișcări ...
adăugat autor Dan
Cred că # 5 este un contrapunct perfect pentru argumentul "git este mai greu de învățat decât svn". Am văzut atât de mulți începători de control al surselor, prin asta. Acestea svn adaugă un fișier, fac mai multă muncă, decid să elimine fișierul și apoi totul aruncă în față atunci când rulează svn ci .
adăugat autor Sharpie

Îmi place Git deoarece ajută dezvoltatorul de comunicare la dezvoltator pe o echipă medie și mare. Ca sistem de control al versiunilor distribuite, prin intermediul sistemului său push / pull, îi ajută pe dezvoltatori să creeze un eco-sistem de cod sursă care să ajute la gestionarea unui număr mare de dezvoltatori care lucrează la un singur proiect.

De exemplu, spuneți că aveți încredere în 5 dezvoltatori și că trageți numai coduri din depozitul lor. Fiecare dintre acești dezvoltatori are propria lor rețea de încredere de unde trag codurile. Astfel, dezvoltarea se bazează pe acea structură de încredere a dezvoltatorilor, unde responsabilitatea codului este împărțită între comunitatea de dezvoltare.

Desigur, există alte beneficii care sunt menționate în alte răspunsuri aici.

0
adăugat

Subversiunea este foarte ușor de folosit. Nu am gasit niciodata in ultimii ani o problema sau ca ceva nu functioneaza asa cum era de asteptat. De asemenea, există multe instrumente GUI excelente, iar suportul pentru integrarea SVN este mare.

Cu Git obțineți un VCS mai flexibil. Puteți să o utilizați în același mod ca și SVN cu un depozit la distanță, unde efectuați toate modificările. Dar, de asemenea, îl puteți folosi în majoritate offline și puteți împinge modificările din timp în timp în depozitul de la distanță. Dar Git este mai complexă și are o curbă de învățare mai abruptă. M-am trezit, în prima oară, să mă angajez în ramuri greșite, să creez ramificații în mod indirect sau să primesc mesaje de eroare, fără prea multe informații despre această greșeală și unde trebuie să caut cu Google informații mai bune. Unele lucruri ușoare precum înlocuirea markerelor ($ Id $) nu funcționează, dar GIT are un mecanism foarte flexibil de filtrare și cârlig pentru a îmbina propriile scripturi și astfel veți obține toate lucrurile de care aveți nevoie și mai mult, dar este nevoie de mai mult timp și de citirea documentației ;)

Dacă lucrați mai mult offline cu depozitul local, nu aveți nicio copie de siguranță dacă ceva se pierde pe mașina dvs. locală. Cu SVN lucrați în cea mai mare parte cu un depozit la distanță, care este, de asemenea, în același timp backup-ul pe un alt server ... Git poate funcționa în același mod, dar nu a fost scopul principal al lui Linus de a avea ceva de genul SVN2. Acesta a fost conceput pentru dezvoltatorii kernel-ului Linux și pentru nevoile unui sistem de control al versiunilor distribuite.

Git este mai bun decât SVN? Dezvoltatorii care au nevoie doar de o istorie a versiunilor și un mecanism de backup au o viață bună și ușoară cu SVN. Dezvoltatorii care lucrează adesea cu filiale, testează mai multe versiuni în același timp sau lucrează mai mult offline pot beneficia de caracteristicile Git. Există câteva caracteristici foarte utile, cum ar fi stashing-ul care nu a fost găsit cu SVN, ceea ce poate face viața mai ușoară. Dar, pe de altă parte, nu toți oamenii vor avea nevoie de toate trăsăturile. Deci nu văd mortul SVN.

Git are nevoie de o documentație mai bună și raportarea erorilor trebuie să fie mai utilă. De asemenea, GUI-urile utile existente sunt rareori. De data aceasta am găsit doar 1 GUI pentru Linux, cu suportul majorității funcțiilor Git (git-cola). Integrarea Eclipse funcționează, dar nu este lansată oficial și nu există niciun site oficial de actualizare (doar un site extern de actualizare cu versiuni periodice din portbagaj)

0
adăugat

Îmi place foarte mult să pot gestiona ramurile locale ale codului meu sursă în Git, fără a mudi apa din depozitul central. În multe cazuri, am să fac checkout de pe serverul Subversion și să derulez un depozit local Git doar pentru a putea face acest lucru. Este, de asemenea, minunat faptul că inițializarea unui depozit Git nu poluează sistemul de fișiere cu o grămadă de foldere enervante .svn de pretutindeni.

Și în ceea ce privește suportul de instrumente Windows, TortoiseGit se ocupă de elementele de bază foarte bine, dar prefer să folosesc linia de comandă dacă nu vreau să văd jurnalul. Îmi place foarte mult modul în care Tortoise {Git | SVN} ajută la citirea jurnalelor de comitere.

0
adăugat

David Richards WANdisco Blog despre subversiune / GIT

Apariția GIT a adus cu ea o varietate de fundamentalisti DVCS? Gitterons? ? care cred ca altceva decat GIT este rahat. Gitteronii par să creadă că ingineria software se întâmplă pe insula lor și adesea uită că majoritatea organizațiilor nu angajează exclusiv ingineri de software. Asta e ok, dar nu este ceea ce cred restul pietei si ma bucur sa demonstrez: GIT, la ultimul look a avut mai putin de trei la suta din piata, in timp ce Subversion are in regiune cinci milioane de utilizatori și aproximativ jumătate din piața globală.

     

Problema pe care am văzut-o a fost că Gitteronii ardeau focuri de la Subversion. Subversiunea este atât de [lent / crappy / restrictive / nu miroase bine / se uită la mine într-un mod amuzant] și acum am GIT și [totul funcționează în viața mea / soția mea a rămas însărcinată / am o prietena după 30 de ani de încercare / am câștigat de șase ori pe masa de blackjack]. Ai imaginea.

0
adăugat
În mod ironic, Git a fost creat special deoarece ingineria software nu se întâmplă pe insule. Acest citat este moronic.
adăugat autor Ben Collins
Deși folosesc git, aș fi destul de fericit să lucrez cu orice DVCS decent, cum ar fi Mercurial, de exemplu. Este nevoie de timp pentru ca conceptul DVCS să câștige popularitate și acum văd că un număr mare de proiecte open source au trecut la git.
adăugat autor Keyo
Printr-o pictură a detractorilor svn ca fundamentaliști, David face pas cu pas problema fundamentală: arhitectura de subversiune este un sfârșit mort. Nu este faptul că GIT este sfârșitul-toate-fi-toate VCS, are warts pentru a fi sigur, dar git, mercurial, darcs și multe alte VCSes toate au modele fundamentale mai elegante repository. Subversiunea nu va face niciodată o activitate de fuziune, deoarece modelul de ramificație == face ca realizarea reală să fie imposibilă. Companiile ca David pot păstra mai mult și mai mult ruj pe un porc, dar SVN va cădea în mod inevitabil dincolo de stadiul act
adăugat autor gtd
Rețineți că David Richards ar putea fi imparțial: produsul pe care îl face este bazat pe subversiune (sau pe idei de subversiune), astfel încât, desigur, ar fi pro-Subversion și anti-Git.
adăugat autor Jakub Narębski

Pentru persoanele care caută un GUI Git bun, Syntevo SmartGit ar putea fi o soluție bună. Proprietatea sa, dar gratuită pentru utilizare non-comercială, rulează pe Windows / Mac / Linux și chiar susține SVN folosind un fel de pod git-svn, cred.

0
adăugat
Arata bine, ar fi minunat daca ar avea si SmartHg!
adăugat autor Regent