Heim  >  Artikel  >  Entwicklungswerkzeuge  >  Was sind die Unterschiede zwischen Git und SVN?

Was sind die Unterschiede zwischen Git und SVN?

青灯夜游
青灯夜游Original
2021-11-26 15:27:2832254Durchsuche

Unterschiede: 1. SVN ist ein zentralisiertes Versionskontrollsystem, während Git ein verteiltes Versionskontrollsystem ist. 2. SVN wird gemäß der Originaldatei gespeichert, die groß ist, während Git in Form von Metadaten gespeichert wird. Das ist sehr groß. 3. Die Zweigoperationen von Git wirken sich nicht auf andere Entwickler aus, SVN jedoch.

Die Betriebsumgebung dieses Tutorials: Windows 7-System, Git-Version 2.30.0, Dell G3-Computer.

Einführung in SVN und Git

SVN (zentrales Versionskontrollsystem)

SVN ist die Abkürzung für Subversion. Es ist ein Open-Source-Versionskontrollsystem, das die meisten gängigen Betriebssysteme unterstützt. Als Open-Source-Versionskontrollsystem verwaltet Subversion Daten, die sich im Laufe der Zeit ändern. Diese Daten werden in einem zentralen Repository abgelegt. Dieses Archiv ähnelt einem gewöhnlichen Dateiserver, speichert jedoch jede Dateiänderung. Auf diese Weise können Sie die Datei auf eine ältere Version zurücksetzen oder den Änderungsverlauf der Datei durchsuchen. Subversion ist ein Allzwecksystem, das zur Verwaltung jeder Art von Datei, einschließlich Programmquellcode, verwendet werden kann.

Workflow

Der Workflow der zentralen Verwaltung ist wie folgt:

Der Kern der zentralen Codeverwaltung ist der Server, bevor er mit der Arbeit eines neuen Tages beginnt, und dann entwickeln. Lösen Sie abschließend den Konflikt und reichen Sie ihn ein. Alle Versionsinformationen werden auf dem Server abgelegt. Wenn die Verbindung zum Server unterbrochen wird, kann man grundsätzlich sagen, dass Entwickler nicht arbeiten können. Hier ein Beispiel:

Starten Sie einen neuen Arbeitstag:

  • Laden Sie den neuesten Code des Projektteams vom Server herunter.

  • Betreten Sie Ihren eigenen Zweig, arbeiten Sie daran und senden Sie stündlich Code an Ihren eigenen Zweig auf dem Server (viele Leute haben diese Angewohnheit. Denn manchmal ändert man den Code immer wieder und möchte ihn schließlich wiederherstellen vorherige) Stündliche Version, oder sehen Sie, welchen Code Sie in der letzten Stunde geändert haben, Sie müssen dies tun).

  • Die dienstfreie Zeit steht vor der Tür. Führen Sie Ihren Zweig mit dem Hauptzweig des Servers zusammen. Die Arbeit des Tages ist abgeschlossen und wird auf dem Server angezeigt.

SVN ist ein zentralisiertes Versionskontrollsystem

Dieser Ansatz bringt viele Vorteile mit sich, insbesondere im Vergleich zum altmodischen lokalen VCS. Jetzt kann jeder einigermaßen sehen, woran andere im Projekt arbeiten. Administratoren können auch die Berechtigungen jedes Entwicklers einfach steuern.
Alles hat zwei Seiten, eine gute und eine schlechte. Der offensichtlichste Nachteil dieser Vorgehensweise besteht darin, dass der zentrale Server ein Single Point of Failure ist. Wenn es eine Stunde lang nicht verfügbar ist, kann in dieser Stunde niemand Updates, Wiederherstellungen, Vergleiche usw. einreichen und es ist unmöglich, zusammenzuarbeiten. Wenn die Festplatte des zentralen Servers ausfällt und kein Backup erstellt wird oder das Backup nicht rechtzeitig genug erfolgt, besteht die Gefahr eines Datenverlusts. Im schlimmsten Fall gehen alle historischen Änderungsdatensätze des gesamten Projekts vollständig verloren, mit Ausnahme einiger vom Client extrahierter Snapshot-Daten. Dies stellt jedoch immer noch ein Problem dar, da Sie nicht garantieren können, dass alle Daten extrahiert wurden.
Im Prinzip kümmert sich Subversion nur um die spezifischen Unterschiede im Dateiinhalt. Dabei wird jeweils protokolliert, welche Dateien aktualisiert wurden und welche Zeilen und Inhalte aktualisiert wurden.

Funktionen von Subversion

  • Jedes Repository hat eine eindeutige URL (offizielle Adresse) und jeder Benutzer erhält Code und Daten von dieser Adresse;

  • Erhält Code-Updates und kann nur eine Verbindung zu diesem eindeutigen Adress-Repository herstellen und synchronisieren Erhalten Sie die neuesten Daten.

  • Die Übermittlung muss über eine Netzwerkverbindung erfolgen (nicht lokales Repository).

  • Die Übermittlung erfordert eine Autorisierung. Wenn keine Schreibberechtigung vorliegt, schlägt die Übermittlung fehl gelingt jedes Mal. Wenn jemand anderes vor Ihnen einreicht, wird die Meldung „Änderungen basieren auf veralteten Versionen, zuerst aktualisieren und dann einreichen“ usw. angezeigt.

  • Konfliktlösung ist ein Wettbewerb der Einreichungsgeschwindigkeit: Wer schnell ist, reicht ein Zuerst, und alles wird gut; diejenigen, die langsam sind, werden es zuerst einreichen. Diejenigen, die nach der Festlegung möglicherweise Probleme mit der Konfliktlösung haben.

  • GIT (Distributed Version Control System)

  • Git ist ein kostenloses, verteiltes Open-Source-Versionskontrollsystem für die agile und effiziente Bearbeitung jedes kleinen oder großen Projekts.

Git ist ein verteiltes Open-Source-Versionskontrollsystem effizientes und schnelles Versionsmanagement von kleinen bis sehr großen Projekten. Git ist eine Open-Source-Versionskontrollsoftware, die von Linus Torvalds entwickelt wurde, um die Verwaltung der Linux-Kernel-Entwicklung zu unterstützen.

Der größte Unterschied zwischen verteilt und zentralisiert besteht darin, dass Entwickler lokal einreichen können und jeder Entwickler über Git Clone ein vollständiges Git-Repository auf den lokalen Computer kopiert.

Workflow

Das Bild unten zeigt den klassischen Git-Entwicklungsprozess.

Funktionsmerkmale von Git

Aus der Sicht eines

allgemeinen Entwicklers

verfügt Git über die folgenden Funktionen:

  1. Klonen Sie das komplette Git-Repository (einschließlich Code- und Versionsinformationen) vom Server auf einen einzelnen Computer.
  2. Erstellen Sie Zweige und ändern Sie Code auf Ihrem eigenen Computer entsprechend unterschiedlichen Entwicklungszwecken.
  3. Senden Sie den Code für den Zweig, den Sie auf einem einzelnen Computer erstellt haben.
  4. Zweige auf einer einzigen Maschine zusammenführen.
  5. Rufen Sie die neueste Version des Codes auf dem Server ab und führen Sie sie dann mit Ihrem Hauptzweig zusammen.
  6. Generieren Sie einen Patch und senden Sie den Patch an den Hauptentwickler.
  7. Wenn der Hauptentwickler anhand des Feedbacks des Hauptentwicklers feststellt, dass ein Konflikt zwischen zwei allgemeinen Entwicklern besteht (ein Konflikt, der gemeinsam zwischen ihnen gelöst werden kann), wird er gebeten, zuerst den Konflikt und dann einen zu lösen von ihnen werden es einreichen. Wenn der leitende Entwickler das Problem selbst lösen kann oder keine Konflikte vorliegen, bestehen Sie die Prüfung.
  8. Die allgemeine Methode zum Lösen von Konflikten zwischen Entwicklern besteht darin, dass Entwickler den Pull-Befehl verwenden können, um Konflikte zu lösen, und dann Patches an den Hauptentwickler senden können, nachdem die Konflikte gelöst sind.

Aus Sicht des Hauptentwicklers (vorausgesetzt, der Hauptentwickler muss keinen Code entwickeln) verfügt Git über die folgenden Funktionen:

  1. Überprüfen Sie E-Mails oder überprüfen Sie den Übermittlungsstatus allgemeiner Entwickler mit anderen Methoden.

  2. Patches anwenden und Konflikte lösen (Sie können sie selbst lösen oder Entwickler bitten, sie vor der erneuten Einreichung zu lösen. Wenn es sich um ein Open-Source-Projekt handelt, müssen Sie auch entscheiden, welche Patches nützlich sind und welche nicht).

  3. Senden Sie die Ergebnisse an einen öffentlichen Server und benachrichtigen Sie dann alle Entwickler.

Git ist ein verteiltes Versionskontrollsystem

Seit seiner Geburt im Jahr 2005 ist Git immer ausgereifter und perfekter geworden, obwohl es sehr einfach zu bedienen ist, behält es dennoch die zu Beginn gesetzten Ziele bei. Es ist schnell und eignet sich hervorragend für die Verwaltung großer Projekte. Darüber hinaus verfügt es über ein unglaubliches nichtlineares Filialverwaltungssystem, das verschiedene komplexe Projektentwicklungsanforderungen bewältigen kann.

Im Gegensatz zu SVN zeichnet Git den Versionsverlauf auf und kümmert sich nur darum, ob sich die gesamten Dateidaten geändert haben. Git speichert keine differenziellen Daten über Änderungen im Dateiinhalt. Tatsächlich ist Git eher so, als würde man einen Schnappschuss der geänderten Dateien erstellen und diese in einem Miniaturdateisystem aufzeichnen. Jedes Mal, wenn ein Update übermittelt wird, scannt es die Fingerabdruckinformationen aller Dateien, erstellt einen Snapshot der Datei und speichert dann einen Index, der auf den Snapshot verweist. Um die Leistung zu verbessern, speichert Git die Datei nicht erneut, wenn sie sich nicht geändert hat, sondern stellt nur eine Verbindung zum zuletzt gespeicherten Snapshot her.

Git-Funktionen

  1. Das Repository jedes Klons in Git ist gleich. Sie können Ihr eigenes Repository aus einem Klon eines beliebigen Repositorys erstellen und Ihr Repository kann bei Bedarf auch als Quelle für andere verwendet werden.
  2. Jeder Extraktionsvorgang von Git ist eigentlich eine vollständige Sicherung des Code-Repositorys. Die Übermittlung erfolgt vollständig lokal, niemand muss Ihnen eine Autorisierung erteilen, Sie sind der Herr Ihres Repositorys und die Übermittlung wird immer erfolgreich sein.
  3. Sogar Änderungen, die auf der alten Version basieren, können erfolgreich übermittelt werden, und durch die Übermittlung wird ein neuer Zweig basierend auf der alten Version erstellt.
  4. Git-Übermittlungen werden nicht unterbrochen, bis Sie mit Ihrer Arbeit vollständig zufrieden sind oder andere Ihr Repository PULL ziehen. Konflikte, die nicht automatisch gelöst werden können, werden Sie dazu auffordern, sie manuell abzuschließen . .
  5. Konfliktlösung ist nicht mehr wie ein Einreichungswettbewerb wie SVN, sondern Zusammenführung und Konfliktlösung werden bei Bedarf durchgeführt.

Der Unterschied zwischen SVN und Git

  • SVN ist ein zentralisiertes Versionskontrollsystem. Es gibt eine ungenaue Metapher: SVN = Versionskontrolle + Backup-Server. SVN fühlt sich bei Verwendung ein bisschen wie ein Archivlager an und unterstützt paralleles Lesen und Schreiben Zu den Funktionen gehören das Abrufen, Importieren, Aktualisieren, Verzweigen, Umbenennen, Wiederherstellen, Zusammenführen usw.

    Git ist ein verteiltes Versionskontrollsystem. Zu den Betriebsbefehlen gehören: Klonen, Ziehen, Pushen, Verzweigen, Zusammenführen, Pushen, Rebase. Git eignet sich gut für die Versionsverwaltung von Programmcode.

  • GIT verfügt wie SVN über ein eigenes zentrales Repository oder einen eigenen Server. GIT bevorzugt jedoch die Verwendung im verteilten Modus, d. h. jeder Entwickler klont sein eigenes Repository auf seinem eigenen Computer, nachdem er den Code vom zentralen Repository/Server ausgecheckt hat.

    Man kann sagen, dass Sie, wenn Sie an einem Ort gefangen sind, an dem Sie keine Verbindung zum Internet haben, z. B. in einem Flugzeug, in einem Keller, in einem Aufzug usw., immer noch Dateien einreichen, historische Versionsaufzeichnungen einsehen können, Erstellen Sie Projektzweige usw. Manchen scheint dies nicht viel zu nützen, aber wenn Sie plötzlich auf eine Umgebung ohne Netzwerk stoßen, wird dies Ihr großes Problem lösen.

  • Und Git speichert es in Form von Metadaten, was sehr klein ist; SVN speichert es in Form von Originaldateien, was relativ groß ist.

    GIT speichert Inhalte in Form von Metadaten, während SVN Inhalte in Form von Dateien speichert. Alle Ressourcenkontrollsysteme verbergen die Metainformationen von Dateien in einem Ordner ähnlich .svn, .cvs usw.

    Wenn Sie die Größe des .git-Verzeichnisses mit der von .svn vergleichen, werden Sie feststellen, dass es einen großen Unterschied zwischen ihnen gibt. Da das .git-Verzeichnis eine geklonte Version des Repositorys auf Ihrem Computer ist, enthält es alles im zentralen Repository, z. B. Tags, Zweige, Versionsdatensätze usw.

  • Branch ist in SVN nichts Besonderes, es ist nur ein weiteres Verzeichnis im Repository. Wenn Sie wissen möchten, ob ein Zweig zusammengeführt wurde, müssen Sie manuell einen Befehl wie svn propget svn:mergeinfo ausführen, um zu bestätigen, ob der Code zusammengeführt wurde.

    Allerdings ist die Arbeit mit GIT-Branches ganz einfach und macht Spaß. Sie können schnell zwischen mehreren Zweigen desselben Arbeitsverzeichnisses wechseln. Sie können nicht zusammengeführte Zweige leicht finden und diese Dateien schnell und einfach zusammenführen.

  • GIT verfügt im Gegensatz zu SVN über keine globale Versionsnummer. Dies ist bei weitem die größte Funktion, die GIT im Vergleich zu SVN fehlt. Sie wissen auch, dass die SVN-Versionsnummer tatsächlich eine Momentaufnahme des Quellcodes zu jedem entsprechenden Zeitpunkt ist. Ich denke, es ist der größte Durchbruch in der Entwicklung von CVS zu SVN. Da GIT und SVN konzeptionell unterschiedlich sind, weiß ich nicht, welche Funktionen in GIT ihnen entsprechen. Wenn Sie Hinweise haben, teilen Sie diese bitte in den Kommentaren mit allen.

  • Die Inhaltsintegrität von GIT ist besser als die von SVN: Der Inhaltsspeicher von GIT verwendet den SHA-1-Hash-Algorithmus. Dies stellt die Integrität des Codeinhalts sicher und reduziert Unterbrechungen des Repositorys bei Festplattenausfällen und Netzwerkproblemen.

  • Auswirkungen von Filialoperationen

    Die Filialoperationen von Git wirken sich nicht auf andere Entwickler aus. Wenn Sie eine neue Filiale erstellen, hat jeder die gleiche Filiale wie Sie. Vor- und Nachteile von SVN und Git: Vor- und Nachteile von SVN . Die Benutzeroberfläche ist einheitlich, die Funktionen sind vollständig und die Bedienung ist komfortabel.

    Vor- und Nachteile von Git
Differenzierte Versionsverwaltung des Programmquellcodes, die Codebasis nimmt nur sehr wenig Platz ein. Einfache Verzweigungscodeverwaltung. Es unterstützt kein Chinesisch, verfügt über eine schlechte grafische Benutzeroberfläche und ist schwierig zu verwenden. Nicht einfach zu fördern.

Unterschiede im Anwendungsbereich von SVN und Git

Die anwendbaren Objekte sind unterschiedlich. Git eignet sich für Entwickler, die an Open-Source-Projekten beteiligt sind. Aufgrund ihres hohen Fachwissens legen sie mehr Wert auf Effizienz als auf Benutzerfreundlichkeit. SVN ist anders, es eignet sich für normale Unternehmensentwicklungsteams. Es ist einfacher zu verwenden.

Die Einsatzanlässe sind unterschiedlich. Git eignet sich für die Entwicklung eines einzelnen Projekts mit mehreren Entwicklungsrollen über das Internet, und SVN eignet sich für die Entwicklung mehrerer paralleler Projekte innerhalb des Unternehmens, die von Projektmanagern koordiniert werden.

  • Berechtigungsverwaltungsstrategien sind unterschiedlich. Git verfügt nicht über eine strenge Berechtigungsverwaltungskontrolle. Solange Sie über ein Konto verfügen, können Sie Code exportieren, importieren und sogar Rollback-Vorgänge durchführen. SVN verfügt über eine strenge Berechtigungsverwaltung und kann Berechtigungen für ein bestimmtes Unterverzeichnis nach Gruppe oder Einzelperson steuern. Unterscheiden Sie zwischen Lese- und Schreibberechtigungen. Genauer gesagt werden Rollback-Vorgänge nicht unterstützt. Stellen Sie sicher, dass der Code jederzeit nachvollziehbar ist.

  • Der Nutzungsumfang von Filialen ist unterschiedlich. In Git können Sie nur das gesamte Warehouse verzweigen. Nach dem Löschen kann es nicht wiederhergestellt werden. In SVN kann die Verzweigung auf jedes Unterverzeichnis abzielen, was im Wesentlichen ein Kopiervorgang ist. Daher können Sie viele hierarchische Zweige erstellen, diese löschen, wenn sie nicht benötigt werden, und bei Bedarf einfach die alte SVN-Version ausprobieren.

  • Basierend auf dem dritten Punkt eignet sich Git für reine Softwareprojekte, typischerweise einige Open-Source-Projekte wie den Linux-Kernel, Busybox usw. Im Gegenteil, SVN ist gut im Multiprojektmanagement. Sie können beispielsweise das BSP/Designdokument/Dateisystem/Anwendung/automatisierte Kompilierungsskript eines Mobiltelefonprojekts in einem SVN-Warehouse speichern oder die Dateisysteme von fünf Mobiltelefonprojekten in einem SVN speichern. n (Anzahl der Projekte)*m (Anzahl der Komponenten) Repositorys müssen in Git eingerichtet werden. In SVN werden nur bis zu n oder m benötigt.

  • Git verwendet eine 128-Bit-ID als Versionsnummer

    , und Sie müssen beim Auschecken angeben, um welchen Zweig es sich handelt, während SVN eine inkrementelle Seriennummer als global eindeutige Versionsnummer verwendet, was präziser und einfacher ist zu verstehen. Obwohl Sie mit gittag einige wörtliche Aliase erstellen können, gilt dies schließlich nur für spezielle Versionen.
  • Nachverfolgbarkeit, der typische Entwicklungsprozess von Git ist: Einen Zweig einrichten, entwickeln, beim lokalen Master einreichen und den Zweig löschen. Dies hat zur Folge, dass frühere Änderungsdetails verloren gehen. Und machen Sie dasselbe unter SVN, ohne irgendwelche Details zu verlieren. Hier ist ein interessanter Link, der die typische Arbeitsweise unter Git zeigt: (mit Master als Kern, ständig neue Branches erstellen und alte Branches löschen)
  • Teilweise Aktualisierung, teilweise Wiederherstellung. Da SVN in jedem Ordner einen .svn-Ordner zur Verwaltung erstellt, können Teilaktualisierungen oder Wiederherstellungen problemlos implementiert werden. Wenn Sie nur bestimmte Teile aktualisieren möchten, kann svn dies sehr gut tun. Wenn der Code falsch geschrieben ist, kann gleichzeitig eine teilweise Wiederherstellung leicht erreicht werden. Natürlich kann Git auch durch historische Versionen wiederhergestellt werden, eine teilweise Wiederherstellung ist jedoch nicht einfach zu erreichen.

  • Welches eignet sich besser für Projektmanagement, SVN oder Git?

    Zuallererst bin ich Projektmanager eines Forschungs- und Entwicklungsteams. Ich habe sowohl SVN als auch Git verwendet, was für das Projektmanagement besser geeignet ist, und Git eignet sich nur für die Codeverwaltung.
  • Zu den Mitgliedern eines Forschungs- und Entwicklungsteams gehören normalerweise: Anforderungsanalyse, Design, Künstler, Programmierer, Tests, Implementierung, Betrieb und Wartung. Jedes Mitglied verfügt über Ergebnisse in seiner Arbeit, einschließlich Dokumenten, Designcode und Programmcode zentral nach Projekten verwaltet. SVN kann Verzeichnisse klar klassifizieren und verwalten und so die Verwaltung des Projektteams in einem geordneten und effizienten Zustand halten.

    Empfohlenes Lernen: „Git Tutorial

Das obige ist der detaillierte Inhalt vonWas sind die Unterschiede zwischen Git und SVN?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Was bedeutet Git Add?Nächster Artikel:Was bedeutet Git Add?