Definition „Version Control“ Was ist Versionskontrolle?
Eine kleine Änderung an einer Datei und nichts geht mehr, aber was hat sich tatsächlich verändert? Die Versionskontrolle zeigt alle Änderungen auf und ermöglicht das Wiederherstellen eines früheren Datenstands.
Anbieter zum Thema

Nicht ganz korrekt aus dem Englischen übersetzt, bezeichnet der Begriff Versionskontrolle den Einsatz von Software oder Cloud-Diensten, die Änderungen an Daten registrieren und einen Vergleich sowie das Zurückholen verschiedener Datenstände ermöglichen.
Ein wesentliches Anwendungsfeld ist die Software-Entwicklung. Weitere Einsatzbereiche sind die Verwaltung von Konfigurationsdateien, speziell bei Unix und kompatiblen Betriebssystemen wie GNU/Linux oder BSD. Darüber hinaus erlaubt die Versionskontrolle zum Teil auch ein Zusammenführen von Änderungen, die von unterschiedlichen Personen unabhängig voneinander vorgenommen wurden.
Im Bereich der Programmierung sind zu diesem Zweck vor allem dedizierte Versionskontrollsysteme (VCS) im Einsatz. Zum Teil ist die Funktionalität aber auch in Anwendungsprogramme integriert. Ein prominentes Beispiel ist die Wiki-Software der Wikipedia, die ein Versionskontrollsystem für Artikel und andere Inhalte bereitstellt.
Welche Grundfunktionalität bietet ein Versionskontrollsystem?
Damit eine Versionsverwaltung mit einem dedizierten System möglich ist, sind zwei Voraussetzungen zu erfüllen. Das VCS muss über die Bearbeitung von Dateien informiert werden und die unterschiedlichen Datenstände müssen eindeutig identifizierbar sein. Die erste Bedingung wird durch das sogenannte Aus- und Einchecken der Dokumente erreicht, die eine Person bearbeitet.
Beim Auschecken aus dem digitalen Archiv (Repository) erzeugt das System eine lokale Kopie des aktuellen Datenstands oder einer explizit angegebenen, älteren Version. Beim Einchecken (Commit) übernimmt es die lokalen Änderungen in das Repository, nachdem es diese auf eventuelle Konflikte mit Änderungen anderer Bearbeiter geprüft hat. Die Identifizierbarkeit unterschiedlicher Datenstände wird durch eine Versionsnummerierung erreicht, die das System im Allgemeinen automatisch aktualisiert.
Änderungen am Datenbestand identifizieren
Die ersten verbreiteten Versionskontrollsysteme waren SCCS (Source Code Control System) und später RCS/CVS (Revision Control System/Concurrent Versions System). Sie nutzten numerische, hierarchisch gegliederte Versionsnummern, bestehend aus mindestens zwei durch jeweils einen Punkt getrennten Elementen. Bei einem solchen Versionierungsschema erhöht das System im Normalfall beim Einchecken die letzte Stelle um Eins. Das ermöglicht eine eindeutige Kennzeichnung der Änderungen und lässt erkennen, in welcher Reihenfolge sie vorgenommen wurden.
Neuere Systeme nutzen zum Teil Hash-Funktionen für die Versionierung. Als Beispiel berechnet das Versionskontrollsystem Git einen Hashwert der gesamten Versionsgeschichte als Versionsnummer, sodass eine Manipulation älterer Versionsstände nicht unbemerkt möglich ist. Blockchain-Algorithmen verwenden die gleiche bzw. eine ähnliche Vorgehensweise, wobei jeder Block auf die Prüfsumme des vorangegangenen Blocks verweist.
Strukturierung der Versionsgeschichte: Mehrere Versionen parallel bearbeiten
Die Versionskontrolle erlaubt zunächst eine lineare Entwicklung eines Datenbestands. Das heißt, jede Änderung baut auf allen vorhergegangenen auf. In der Praxis wird aber beispielsweise ein Quelltext auch in verschiedenen Versionen parallel weiterentwickelt.
Versionskontrollsysteme unterstützen diese Arbeitsweise durch Branching (Verzweigung). So kann zum Beispiel nach dem Erzeugen eines Branchs aus der aktuellsten Version, im Hauptast (Trunk) die normale Weiterentwicklung einer Software erfolgen. Gleichzeitig können im Branch Bugfixes für eine veröffentlichte, stabile Version eingepflegt werden.
Erste Meilensteine der Entwicklung der Versionskontrolle
Bereits 1972 erstveröffentlicht, fand das Source Code Control System (SCCS) eine große Verbreitung und mit seinem Kommandosatz Eingang in die Single Unix Specification. Ein charakteristisches Feature ist der SCCSid String, der mit den Zeichen "@(#)" beginnt. Er wird innerhalb einer Datei beim Einchecken durch das System selbständig aktualisiert und ermöglicht eine automatische Kennzeichnung der Dateiversion im Quelltext wie auch im kompilierten Programm.
Eine ähnliche Funktionalität bietet auch das zehn Jahre später entstandene Revision Control System (RCS). Dessen Keyword-Strings sind aber in Dollarzeichen eingeschlossen und beginnen mit einem Schlüsselwort wie "Id", "Revision" oder "Author", gefolgt von einem Doppelpunkt. Beide Kennzeichnungsarten werden ebenfalls von einigen neueren Versionskontrollsystemen verwendet. Dazu gehört CVS, das ursprünglich eine RCS-Installation voraussetzte, auf der es aufbaute. Ebenso Apache Subversion (SVN), eine weitgehend CVS-kompatiblen Neuentwicklung aus dem Jahr 2000.
Wichtige Konzepte der Versionskontrolle
Ein wesentliches Feature der Versionsverwaltung ist die Synchronisation der Bearbeitung desselben Datenbestands durch mehrere Bearbeiter. Führen diese gleichzeitig Änderungen am selben Teil einer Datei durch, also beispielsweise denselben Code-Zeilen eines Programms, dann führt das zu einem Konflikt.
Um das zu verhindern, sperrt RCS den Schreibzugriff auf eine Datei beim Checkout für andere Bearbeiter. Andere Systeme bieten zum Teil sehr ausgefeilte Mechanismen für das Zusammenführen (Mergen) parallel durchgeführter Änderungen.
Unterschiedliche Arten der Versionsverwaltung
Versionskontrollsysteme haben sich im Laufe der Zeit an geänderte Anforderungen angepasst beziehungsweise wurden durch neuere, besser angepasste Systeme abgelöst. Wesentliche Konzepte und ihre typischen Vertreter sind:
SCCS: Interleaved Deltas, jeder Versionsstand gleich schnell reproduzierbar
SCCS, RCS: Verwaltung einzelner Dateien
CVS, SVN: Gemeinsame Verwaltung aller Dateien eines Projekts (Repository), Client-Server-Architektur
Git, Mercurial, Monotone: Verteilte Versionskontrolle, jeder Entwickler hat ein vollständiges Repository lokal vorliegen
Die Verbreitung verteilter Versionskontrollsysteme ist vor allem auf das Open-Source-Entwicklungsmodell zurückzuführen. So ist zum Beispiel das VCS Git ursprünglich von Linus Torvalds speziell für die Entwicklung des Betriebssystemkerns Linux geschrieben worden.
(ID:45224941)