Warum sagen Git-Benutzer, dass Subversion nicht den gesamten Quellcode lokal hat?

23

Ich gehe nur auf das, was ich auf SO gelesen habe, also vergib mir, aber alles, was ich gelesen habe, besagt, dass ein großer Vorteil von Git gegenüber Subversion darin besteht, dass Git dem Entwickler den gesamten Quellcode lokal zur Verfügung stellt, ohne irgendetwas tun zu müssen der Server.

Mit meiner eingeschränkten Verwendung von SVN und TortoiseSVN hatte ich den gesamten Quellcode, oder zumindest dachte ich, dass ich das getan habe. Zum Beispiel habe ich eine Website. Ich lade es auf SVN hoch. Ich betreibe meine Website immer noch lokal, nicht wahr? Wenn jemand eine Änderung einreicht und ich nicht verbunden bin, spielt es keine Rolle, ob ich Git habe oder nicht, bis ich mich wieder mit dem Server verbinde.

Ich verstehe nicht. Ich bitte nicht um eine Wiederholung von einem gegen den anderen außer diesem einen Punkt.

Johnny
quelle
2
Es ist nicht so, dass Sie Ihren gesamten Quellcode lokal haben, sondern dass Sie den gesamten Repository-Verlauf lokal haben. Dadurch werden alle Repository-Interaktionen mit Ausnahme der Serversynchronisierung viel schneller.
Stonemetal

Antworten:

69

Die Prämisse, die Sie in Frage stellen, ist wirklich falsch:

Ein großer Vorteil von Git gegenüber Subversion ist, dass Git den gesamten Quellcode lokal an den Entwickler weitergibt

Sowohl mit Subversion als auch mit Git haben Sie Ihren Quellcode lokal. Mit Git haben Sie sowohl Ihren Quellcode als auch ein Repository auf Ihrem lokalen Rechner.

Es geht so etwas.

Subversion:

Ihr Code <-> Das Repository

Git:

Ihr Code <-> Ihr lokales Repository <-> Ein Remote-Repository (... <-> ein anderes Remote-Repository usw.)

Ein Vorteil dieser Struktur besteht darin, dass Sie die Quellcodeverwaltung weiterhin verwenden und Ihre lokalen Änderungen in Ihrem lokalen Repository festschreiben können, ohne die Arbeit anderer Teammitglieder (mit denen Sie das Remote-Repository gemeinsam nutzen) zu stören.

Mit Subversion müssten Sie entweder das Risiko eingehen, den Build für andere zu brechen, oder eine längere lokale Entwicklung ohne jegliche Quellcodeverwaltung zu erleiden, die mit einem riesigen Commit (oder eher einem Revert) endet.

Auf der anderen Seite können Sie mit Git diese Änderungen in Ihr lokales Repository übernehmen, Protokolle und Unterschiede anzeigen oder Ihre Änderungen vornehmen und nur dann, wenn Sie der Meinung sind, dass es bereit ist, mit dem Team geteilt zu werden, die Änderungen vom lokalen Repository übertragen Repository auf das entfernte.

Goran Jovic
quelle
10
Dies ist eine sehr schöne Antwort und schlägt wirklich zu Hause mit "... Risiko, den Build für andere Menschen zu brechen oder eine längere lokale Entwicklung ohne jegliche Quellcodeverwaltung zu erleiden ..."
Charles Sprayberry
1
@cspray: Danke! Ich bin mir sicher, dass es auch andere Vorteile gibt, aber das ist der größte Schmerz, den ich mit Svn hatte.
Goran Jovic
Git FTW (8 weitere zu gehen ...)
Trevor Boyd Smith
2
@DanNeely: Tatsächlich ist es so - OP hat nach einer Behauptung gefragt, die er irgendwo gelesen hat, und die Antwort ist, dass es einfach nicht wahr ist (siehe den ersten Teil meiner Antwort). Der zweite Teil ist nur eine Erklärung dessen, was derjenige, der die Behauptung aufgestellt hat, wahrscheinlich sagen wollte und warum.
Goran Jovic
1
@Giorgio: Probieren Sie es aus und Sie werden es wissen :) Im Ernst, ich glaube, ich habe es noch nie ohne Probleme geschafft (abgesehen von einer vollständig manuellen Zusammenführung, die den Zweck des Tools zunichte macht)
Goran Jovic
17

Git oder Mercurial speichern Ihr gesamtes Repository lokal mit allen Revisionen und benannten Zweigen. Subversion speichert nur eine - normalerweise die Head Revision. So können Sie mit Git und Mercurial auf das vollständige Repository (dh Ihren aktuellen Quellcode und dessen Verlauf) zugreifen, auch wenn Ihr Netzwerk mit SVN zusammenbricht. Sie sind auf die letzte Revision beschränkt, auf die Sie aktualisiert haben.

Amenti
quelle
1
@ Murph Danke. Das war im Wesentlichen das, was ich meinte. Ich habe versucht zu klären.
Amenti
Es ist nicht nur eine Frage, ob Sie eine Netzwerkverbindung zum Server haben oder nicht. Das lokale E / A-Verfahren ist viel schneller und hat eine geringere Latenz als das Netzwerk-E / A-Verfahren, wodurch das Überprüfen des Verlaufs oder das Beschuldigen einer Datei viel schneller erfolgt (TrotiseSVN-Schuldwarnung "Bitte warten - dies kann einige Minuten dauern. Ernsthaft!"). Der Nachteil ist, dass die gesamte lokale Historie viel mehr Speicherplatz in größeren Repositorys erfordern kann. Dies kann auf Laptops problematisch sein, wenn Sie nicht einfach ein zusätzliches Laufwerk hinzufügen können, um eine kleinere, nicht bankrotte SSD zu ergänzen.
Dan Neely
@ DanNeelys Kommentar war 2012 wahrscheinlich vernünftig, aber 4 Jahre später ist es fast unmöglich, ein Git-Projekt zu finden, das jeden größeren Teil einer SSD belegen kann
Igor Stoppa,
7

Die kurze Antwort lautet: Mit git haben Sie Ihren gesamten Quellcode, mit subversion haben Sie die neueste Version Ihres Quellcodes.

Git speichert lokal eine Kopie des gesamten Verlaufs Ihres Repositorys. Bei Subversion befindet sich die gesamte Historie auf einem Server.

Bryan Oakley
quelle
2

Ich denke, Sie werden feststellen, dass bei SVN alle Ihre Aktionen eine Kommunikation mit dem Server erfordern, während dies bei GIT nicht der Fall ist. Wenn Sie mit SVN verzweigen möchten, verzweigen Sie auf dem Server und ziehen diesen Zweig herunter. Mit GIT können Sie eine lokale Zweigstelle erstellen, ohne dass der "Server" davon Kenntnis hat.

Sie sagen zu Recht, dass Sie den Quellcode sowohl mit SVN als auch mit GIT haben, aber mit GIT muss es keinen zentralen Server geben, der auch den Quellcode enthält. Mit GIT sind Sie möglicherweise die EINZIGE Person mit dem Quellcode und können dennoch alle Funktionen ausführen, die Sie mit einem typischen VCS ausführen würden.

Ich habe Argumente gegen GIT gehört, und ich denke, dass dies bei Ihrer Frage hilfreich sein kann. Da Sie nicht verpflichtet sind, sich auf ein zentrales Repo festzulegen, besitzen Sie Ihren Quellcode, bis Sie ihn festgeschrieben und auf Ihren Server übertragen haben, falls du hast ein. Mit SVN kann die Versionskontrolle nur durch Festschreiben auf dem Server erfolgen. Mit GIT können Sie jedoch möglicherweise alles auf Ihrem lokalen Computer belassen, und wenn etwas schief geht, können Sie "alles verlieren", obwohl dies genauso einfach möglich ist Verlieren Sie alle Ihre Änderungen mit SVN, wenn Sie kein Commit durchgeführt haben und Ihre Festplatte ebenfalls abgestürzt ist.

David Peterman
quelle
1

Da Sie kein Commit für ein zentrales Repo durchführen müssen, besitzen Sie Ihren Quellcode, bis Sie ihn festgeschrieben und auf Ihren Server übertragen haben (sofern vorhanden). Mit SVN kann die Versionskontrolle nur durch Festschreiben auf dem Server erfolgen. Mit GIT können Sie jedoch möglicherweise alles auf Ihrem lokalen Computer belassen, und wenn etwas schief geht, können Sie "alles verlieren", obwohl dies genauso einfach möglich ist Verlieren Sie alle Ihre Änderungen mit SVN, wenn Sie kein Commit durchgeführt haben und Ihre Festplatte ebenfalls abgestürzt ist.

Wenn Sie täglich pushen, sollte das Risiko gering sein. Wenn Sie jedoch gezwungen sind, täglich einen Commit für den SVN-Server durchzuführen, können Sie am Ende des Tages alle Änderungen in einem einzigen großen Änderungssatz vornehmen, der nicht jede Änderung in kleine Schritte unterteilt. Mit git werden Sie aufgefordert, mehrere kleine Commits zu tätigen. Wenn beim Verschieben eine Zusammenführung erforderlich ist, versuchen Sie, sie zusammenzuführen und zu verschieben. Wenn Sie derzeit keine Zusammenführung durchführen können, können Sie einen Push in eine neue Filiale oder ein anderes Repository auf dem Server ausführen.

linquize
quelle