Informationen zu Versionskontrollsystemen

Hallo! Nächste Woche startet OTUS einen "Super-Workshop zur Verwendung und Konfiguration von GIT" . Dies ist, was ich beschlossen habe, der heutigen Veröffentlichung zu widmen.










Einführung



Ich schlage vor, den Zweck und die verschiedenen Möglichkeiten der Organisation von Versionskontrollsystemen zu erörtern.



Versionskontrollsysteme



Ein Versionskontrollsystem ist in erster Linie ein Werkzeug, und ein Werkzeug dient zur Lösung einer bestimmten Klasse von Problemen. Ein Versionskontrollsystem ist also ein System, das Änderungen

an einer Datei oder einem Satz von Dateien im Laufe der Zeit aufzeichnet und es Ihnen ermöglicht, später zu einer bestimmten Version zurückzukehren. Wir möchten einen bestimmten Satz von Dateien flexibel verwalten und bei Bedarf auf bestimmte Versionen zurücksetzen. Sie können bestimmte Änderungen an der Datei rückgängig machen, das Löschen rückgängig machen und sehen, wer etwas geändert hat. In der Regel werden Versionskontrollsysteme zum Speichern von Quellcode verwendet, dies ist jedoch nicht erforderlich. Sie können zum Speichern beliebiger Dateitypen verwendet werden.



Wie speichere ich verschiedene Versionen von Dateien? Die Leute kamen nicht sofort zu einem Tool wie Versionskontrollsystemen, und sie selbst sind sehr unterschiedlich. Das vorgeschlagene Problem kann mit guten alten lokalen, zentralisierten oder verteilten Versionskontrollsystemen zum Kopieren und Einfügen gelöst werden.



Kopieren Einfügen



Eine bekannte Methode, die auf dieses Problem angewendet wird, sieht möglicherweise folgendermaßen aus: Wir benennen Dateien nach dem Muster Dateiname_ {Version}, möglicherweise unter Hinzufügung der Erstellungs- oder Änderungszeit.



Diese Methode ist sehr einfach, aber anfällig für verschiedene Fehler: Sie können versehentlich die falsche Datei ändern, Sie können aus dem falschen Verzeichnis kopieren (schließlich werden Dateien in diesem Modell auf diese Weise übertragen).



Lokales Versionskontrollsystem



Der nächste Schritt bei der Entwicklung von Versionskontrollsystemen war die Schaffung lokaler Versionskontrollsysteme. Sie waren eine einfache Datenbank, in der alle Änderungen in Dateien aufgezeichnet werden.



Ein Beispiel für solche Systeme ist das RCS-Versionskontrollsystem, das 1985 entwickelt wurde (der letzte Patch wurde 2015 geschrieben) und Änderungen in Dateien (Patches) unter Beibehaltung der Versionskontrolle speichert. Mit einer Reihe dieser Änderungen können Sie einen beliebigen Status der Datei wiederherstellen. RCS wird mit Linux ausgeliefert.



Das lokale Versionskontrollsystem löst das Problem gut, aber sein Problem ist die Haupteigenschaft - die Lokalität. Es ist überhaupt nicht für den kollektiven Gebrauch bestimmt.



Zentrales Versionskontrollsystem



Das zentralisierte Versionskontrollsystem wurde entwickelt, um das Grundproblem des lokalen Versionskontrollsystems zu lösen.



Um ein solches Versionskontrollsystem zu organisieren, wird ein einzelner Server verwendet, der alle Versionen von Dateien enthält. Clients, die auf diesen Server zugreifen, erhalten von diesem zentralen Repository. Die Verwendung zentraler Versionskontrollsysteme ist seit vielen Jahren der Standard. Dazu gehören CVS, Subversion, Perforce.



Diese Systeme sind aufgrund eines einzigen Servers einfach zu verwalten. Gleichzeitig führt das Vorhandensein eines zentralisierten Servers dazu, dass ein einzelner Fehlerpunkt in Form dieses Servers selbst auftritt. Wenn dieser Server deaktiviert ist, können Entwickler keine Dateien herunterladen. Das schlimmste Szenario ist die physische Zerstörung des Servers (oder der Absturz der Festplatte), die zum Verlust der Codebasis führt.



Trotz der Tatsache, dass die Mode für SVN vorbei ist, gibt es manchmal einen umgekehrten Kurs - den Übergang von Git zu SVN. Der Punkt ist, dass SVN das selektive Auschecken ermöglicht, bei dem nur einige Dateien vom Server heruntergeladen werden. Dieser Ansatz gewinnt bei der Verwendung von Monorepositories an Beliebtheit, was später erläutert werden kann.



Verteiltes Versionskontrollsystem



Verteilte Versionskontrollsysteme werden verwendet, um einen einzelnen Fehlerpunkt zu beseitigen. Sie implizieren, dass der Client das gesamte Repository für sich selbst herunterlädt, anstatt bestimmte Dateien von Interesse für den Client herunterzuladen. Wenn eine Kopie des Repositorys stirbt, führt dies nicht zum Verlust der Codebasis, da diese vom Computer eines Entwicklers wiederhergestellt werden kann. Jede Kopie ist eine vollständige Sicherung der Daten.



Alle Kopien sind gleich und können miteinander synchronisiert werden. Dieser Ansatz ist der Master-Master-Replikation sehr ähnlich (und ist es auch).



Diese Art von Versionskontrollsystem umfasst Mercurial, Bazaar, Darcs und Git. Das letzte Versionskontrollsystem wird nachstehend ausführlicher erläutert.



Git Geschichte



Im Jahr 2005 trennte die Versionskontrollfirma BitKeeper die Verbindung zur Linux-Kernel-Community. Die Community beschloss dann, ein eigenes Versionskontrollsystem zu entwickeln. Die Hauptwerte des neuen Systems sind: vollständige Dezentralisierung, Geschwindigkeit, einfache Architektur, gute Unterstützung für die nichtlineare Entwicklung.



Fazit



Wir untersuchten die Möglichkeiten zur Organisation von Versionskontrollsystemen, diskutierten Optionen zur Lösung der diesen Systemen zugewiesenen Aufgaben, sprachen über die Vor- und Nachteile der einzelnen Systeme und machten uns mit der Geschichte des Git-Versionskontrollsystems vertraut.






All Articles