Git ist nicht besser als Subversion. Ist aber auch nicht schlimmer. Es ist anders.
Der Hauptunterschied besteht darin, dass es dezentralisiert ist. Stellen Sie sich vor, Sie sind ein Entwickler unterwegs, entwickeln auf Ihrem Laptop und möchten eine Quellcodeverwaltung, damit Sie 3 Stunden zurückgehen können.
Mit Subversion haben Sie ein Problem: Das SVN-Repository befindet sich möglicherweise an einem Ort, den Sie nicht erreichen können (in Ihrem Unternehmen, und Sie haben derzeit kein Internet). Sie können keine Festschreibung vornehmen. Wenn Sie eine Kopie Ihres Codes erstellen möchten, müssen Sie ihn buchstäblich kopieren / einfügen.
Mit Git haben Sie dieses Problem nicht. Ihre lokale Kopie ist ein Repository, und Sie können sich darauf festlegen und alle Vorteile der Quellcodeverwaltung nutzen. Wenn Sie die Konnektivität zum Haupt-Repository wiederherstellen, können Sie sich dagegen festlegen.
Das sieht auf den ersten Blick gut aus, aber denken Sie an die zusätzliche Komplexität dieses Ansatzes.
Git scheint das "neue, glänzende, coole" Ding zu sein. Es ist keineswegs schlecht (es gibt einen Grund, warum Linus es schließlich für die Linux-Kernel-Entwicklung geschrieben hat), aber ich habe das Gefühl, dass viele Leute in den Zug "Distributed Source Control" einsteigen, nur weil er neu ist und von Linus Torvalds geschrieben wurde, ohne dass dies tatsächlich der Fall ist zu wissen warum / ob es besser ist.
Subversion hat Probleme, aber auch Git, Mercurial, CVS, TFS oder was auch immer.
Bearbeiten: Diese Antwort ist jetzt ein Jahr alt und generiert immer noch viele positive Stimmen. Deshalb dachte ich, ich werde noch einige Erklärungen hinzufügen. Im letzten Jahr seit dem Schreiben dieses Artikels hat Git viel Schwung und Unterstützung gewonnen, insbesondere seit Websites wie GitHub wirklich in Fahrt gekommen sind. Ich benutze heutzutage sowohl Git als auch Subversion und möchte einige persönliche Einblicke geben.
Erstens kann Git bei der dezentralen Arbeit zunächst sehr verwirrend sein. Was ist eine Fernbedienung? und Wie richte ich das anfängliche Repository richtig ein? sind zwei Fragen, die am Anfang auftauchen, insbesondere im Vergleich zu SVNs einfachem "svnadmin create". Gits "git init" kann die Parameter --bare und --shared annehmen, was der "richtige" Weg zu sein scheint, eine Zentralisierung einzurichten Repository. Es gibt Gründe dafür, aber es erhöht die Komplexität. Die Dokumentation des Befehls "checkout" ist für Leute, die umsteigen, sehr verwirrend - der "richtige" Weg scheint "git clone" zu sein, während "git checkout" die Zweige zu wechseln scheint.
Git leuchtet WIRKLICH, wenn Sie dezentralisiert sind. Ich habe einen Server zu Hause und einen Laptop unterwegs, und SVN funktioniert hier einfach nicht gut. Mit SVN kann ich keine lokale Quellcodeverwaltung haben, wenn ich nicht mit dem Repository verbunden bin (Ja, ich kenne SVK oder Möglichkeiten zum Kopieren des Repos). Bei Git ist das sowieso der Standardmodus. Es ist jedoch ein zusätzlicher Befehl (git commit schreibt lokal fest, während git push origin master den Master-Zweig an die Fernbedienung mit dem Namen "origin" schiebt).
Wie oben gesagt: Git erhöht die Komplexität. Zwei Modi zum Erstellen von Repositorys: Auschecken vs. Klonen, Festschreiben vs. Push ... Sie müssen wissen, welche Befehle lokal und welche mit "dem Server" funktionieren (ich gehe davon aus, dass die meisten Leute immer noch ein zentrales "Master-Repository" mögen). ).
Außerdem ist das Tooling zumindest unter Windows immer noch unzureichend. Ja, es gibt ein Visual Studio AddIn, aber ich verwende immer noch git bash mit msysgit.
SVN hat den Vorteil, dass es VIEL einfacher zu erlernen ist: Es gibt Ihr Repository, alle Änderungen daran, wenn Sie wissen, wie man erstellt, festschreibt und auscheckt, und Sie bereit sind, Dinge wie Verzweigung, Aktualisierung usw. später aufzunehmen auf.
Git hat den Vorteil, dass es VIEL besser geeignet ist, wenn einige Entwickler nicht immer mit dem Master-Repository verbunden sind. Außerdem ist es viel schneller als SVN. Und nach allem, was ich höre, ist die Verzweigungs- und Zusammenführungsunterstützung viel besser (was zu erwarten ist, da dies die Hauptgründe sind, warum sie geschrieben wurde).
Dies erklärt auch, warum es im Internet so viel Aufsehen erregt, da Git perfekt für Open Source-Projekte geeignet ist: Fork es einfach, übertrage deine Änderungen auf dein eigenes Fork und fordere dann den ursprünglichen Projektbetreuer auf, deine Änderungen abzurufen. Mit Git funktioniert das einfach. Probieren Sie es wirklich auf Github aus, es ist magisch.
Was ich auch sehe, sind Git-SVN-Bridges: Das zentrale Repository ist ein Subversion-Repo, aber Entwickler arbeiten lokal mit Git und die Bridge überträgt ihre Änderungen dann auf SVN.
Aber auch mit dieser langen Ergänzung stehe ich zu meiner Kernbotschaft: Git ist nicht besser oder schlechter, es ist einfach anders. Wenn Sie die Notwendigkeit einer "Offline-Quellcodeverwaltung" haben und bereit sind, zusätzliche Zeit damit zu verbringen, diese zu lernen, ist dies fantastisch. Wenn Sie jedoch eine streng zentralisierte Quellcodeverwaltung haben und / oder Schwierigkeiten haben, die Quellcodeverwaltung einzuführen, weil Ihre Mitarbeiter nicht interessiert sind, dann glänzen die Einfachheit und die hervorragenden Werkzeuge (zumindest unter Windows) von SVN.