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

5 freie Versionskontrollsysteme im Überblick

Git, SVN, Mercurial, Bazaar und Fossil

5 freie Versionskontrollsysteme im Überblick

Ein Version Control System, kurz VCS, bringt beim Programmieren Ordnung ins Code-Chaos. Doch die Software-Kategorie löst ähnlich emotionale Debatten aus, wie es bei Betriebssystemen oder Texteditoren der Fall ist. Wir stellen die wichtigsten quelloffenen und freien Kandidaten vor. lesen

Low-Code-Plattform Progress Kinvey

Entwicklung und Bereitstellung vom Mobile- und Web-Apps

Low-Code-Plattform Progress Kinvey

Ob iOS- oder Android-App, Web-, Chat- oder andere Applikationen: Mit der JavaScript-basierenden Low-Code-Plattform Kinvey hat Progress eine Lösung im Programm, mit der sich native Anwendungen für diverse Kanäle bereitstellen lassen. lesen

IntelliJ IDEA und Vim unter Linux

Beliebte Code-Editoren, Teil 2

IntelliJ IDEA und Vim unter Linux

IntelliJ IDEA und Vim gehören unter GNU/Linux zu den populärsten Development-Tools. Beide Werkzeuge haben ihre eigenen Vor- und Nachteile, wir sehen uns die Funktionen im Folgenden näher an. lesen

DevOps-Projekte mit AWS CodeStar erstellen

CI/CD-Pipeline mit AWS-Tools, Teil 1

DevOps-Projekte mit AWS CodeStar erstellen

Im Jahr 2017 hat AWS den Dienst AWS CodeStar vorgestellt. Dieser soll das Einrichten und Betreiben von Continuous-Integration- und Continuous-Delivery-Pipelines besonders komfortabel machen. Ein solches Szenraio spielen wir hier durch. lesen

IaC stützt DevOps und vereinfacht Prozesse

Infrastructure as Code – ein Fall für Profis

IaC stützt DevOps und vereinfacht Prozesse

Infrastructure as Code, kurz IaC, ist die Basis von Cloud Computing. Erst dieser Ansatz macht die Cloud zu dem, wofür wir sie lieben: Zu einer flexiblen IT-Infrastruktur, mit der wir schnell hunderte von Maschinen auf Knopfdruck bedienen können. lesen

Test Automation University von Applitools

Geplante Community zu Testautomatisierung

Test Automation University von Applitools

Die Anwendungstest-Experten von Applitools haben eine Community-getriebene Bildungsplattform ins Leben gerufen. Über die Test Automation University sollen Entwickler nützliche Strategien und Techniken erhalten, die sich mit Testautomatisierung befassen. lesen

Microservices einführen oder nicht?

Monolithen nicht grundsätzlich aufbrechen

Microservices einführen oder nicht?

Microservices spielen inzwischen bei vielen Unternehmen eine wichtige Rolle. Die Aufsplittung von Anwendungen aber noch nicht uneingeschränkt zu empfehlen, heißt es im ThoughtWorks Technology Radar. Die Gründe wollen wir hier diskutieren. lesen

UI-Versionskontrollsystem von Applitools

Benutzeroberflächen per Commit aktualisieren

UI-Versionskontrollsystem von Applitools

Applitools hat ein UI Version Control System veröffentlicht. Mit diesem können Entwickler rückverfolgen, wie frühere Versionen einer Anwendung ausgesehen haben, ohne die ältere Version erneut zu erstellen. lesen

Was ist IaC?

Definition „Infrastructure as Code“

Was ist IaC?

Infrastructure as Code ist die Fortsetzung der Unix Philosophie mit DevOps-Mitteln. Das Administrationskonzept für IT-Infrastruktur macht die individuelle Installation und Konfiguration von Hard- und Software unabhängig von manueller Interaktion. lesen

copyright

Dieser Beitrag ist urheberrechtlich geschützt. Sie wollen ihn für Ihre Zwecke verwenden? Infos finden Sie unter www.mycontentfactory.de (ID: 45224941 / Definitionen)