Definition „Version Control“

Was ist Versionskontrolle?

| Autor / Redakteur: LineFeed / Stephan Augsten

Moderne Versionskontrollsysteme machen es möglich, dass mehrere Bearbeiter gleichzeitig den Datenbestand ändern können.
Moderne Versionskontrollsysteme machen es möglich, dass mehrere Bearbeiter gleichzeitig den Datenbestand ändern können. (Bild: geralt - Pixabay.com / CC0)

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.

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.

Kommentare werden geladen....

Kommentar zu diesem Artikel

Der Kommentar wird durch einen Redakteur geprüft und in Kürze freigeschaltet.

Anonym mitdiskutieren oder einloggen Anmelden

Avatar
Zur Wahrung unserer Interessen speichern wir zusätzlich zu den o.g. Informationen die IP-Adresse. Dies dient ausschließlich dem Zweck, dass Sie als Urheber des Kommentars identifiziert werden können. Rechtliche Grundlage ist die Wahrung berechtigter Interessen gem. Art 6 Abs 1 lit. f) DSGVO.
  1. Avatar
    Avatar
    Bearbeitet von am
    Bearbeitet von am
    1. Avatar
      Avatar
      Bearbeitet von am
      Bearbeitet von am

Kommentare werden geladen....

Kommentar melden

Melden Sie diesen Kommentar, wenn dieser nicht den Richtlinien entspricht.

Kommentar Freigeben

Der untenstehende Text wird an den Kommentator gesendet, falls dieser eine Email-hinterlegt hat.

Freigabe entfernen

Der untenstehende Text wird an den Kommentator gesendet, falls dieser eine Email-hinterlegt hat.

Aktuelle Beiträge zu diesem Thema

Wie funktioniert GitOps in der Praxis?

Code-gesteuerte Anwendungsumgebung über Git

Wie funktioniert GitOps in der Praxis?

Wenn GitOps eines ist, dann aktuell ein großes Thema. Überall sprießen Artikel, Services und Produkte aus dem Boden, die sich mit GitOps schmücken. Aber um herauszufinden, was GitOps denn nun genau ist, was da passiert und wo es her kommt, braucht es bisweilen eine Ewigkeit. lesen

Git feiert im April seinen 15. Geburtstag

Jubiläum der Versionsverwaltung

Git feiert im April seinen 15. Geburtstag

Am 7. April feiert die quelloffene Versionsverwaltung namens Git ihren 15. Geburtstag. Damals hob sie Linux-Urgestein Linus Torvalds auf der Taufe – wenngleich nicht ganz freiwillig. lesen

Open-Source-IDEs für 3D-Spiele

Panda3D, PlayCanvas und Cafu Engine im Überblick

Open-Source-IDEs für 3D-Spiele

Beim Gaming ist 3D-Grafik längst Normalität. Titel wie Doom haben den Weg schon vor langer Zeit geebnet – und als freie Gaming Engine ist Doom weiterhin Wegbereiter. Diese und weitere vielversprechenden IDEs für 3D-Games stellen wir heute vor. lesen

Erste Schritte mit Git und GitHub

Effektive Zusammenarbeit im Development-Team

Erste Schritte mit Git und GitHub

Git ist seit Jahren eines der bekanntesten Versionskontrollsysteme für Entwickler. Mit der Lösung können Teams gemeinsam an Projekten arbeiten und Quellcode-Versionen effektiv verwalten, auch in Kombination mit GitHub. lesen

AWS Toolkit für Visual Studio einrichten

ASP.NET-Apps auf AWS Elastic Beanstalk migrieren, Teil 2

AWS Toolkit für Visual Studio einrichten

Elastic Beanstalk bietet eine komplett von AWS verwaltete .NET-Plattform für das Deployment sowie die Skalierung und Aktualisierung von Anwendungen. Wie man das AWS Toolkit für Visual Studio einrichtet, zeigen wir im zweiten Teil dieser Serie. lesen

7 Open Source Tools für Developer

Entwickeln, Berichte erstellen und Daten abfragen

7 Open Source Tools für Developer

Open-Source-Tools bieten in der Entwicklung einige Vorteile. Für die Developer Community sind sie in der Regel kostenlos, ihr Code ist frei zugänglich und neue Versionen erscheinen in kurzem Zeitabstand. lesen

DevOps für Salesforce-Umgebungen

Prozessoptimierung im Cloud CRM

DevOps für Salesforce-Umgebungen

Bei der Entwicklung und dem Betrieb für Salesforce werden Unternehmen vor verschiedene Herausforderungen gestellt. Welche Herausforderungen das sind und wie DevOps bei der Optimierung des Software-Lifecycles unterstützen kann, werde ich in diesem Fachartikel erläutern. lesen

Geld mit Open Source verdienen

Quelloffene Projekte als Einnahmenquelle

Geld mit Open Source verdienen

Open-Source-Code ist qualitativ meist gleichauf mit kommerziellen Projekten. Trotzdem gibt es Firmen, die mit ihrer Software scheinbar nie auf einen grünen Zweig kommen. lesen

Amazon forciert Nutzung von Rust

AWS EC2, S3 und Lambda sollen stärker profitieren

Amazon forciert Nutzung von Rust

Viele Dienste in AWS, zum Beispiel EC2, S3 und Lambda, profitieren von Rust. Amazon will die Programmiersprache noch stärker einsetzen und zudem Förderkredite vergeben. lesen

copyright

Dieser Beitrag ist urheberrechtlich geschützt. Sie wollen ihn für Ihre Zwecke verwenden? Kontaktieren Sie uns über: support.vogel.de/ (ID: 45224941 / Definitionen)