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.