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

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

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

DevOps heißt nicht zwingend Automatisierung

Aufbereitete „State of DevOps“-Umfrage von Puppet

DevOps heißt nicht zwingend Automatisierung

Trotz intensiver Bemühungen, DevOps-Praktiken umzusetzen und auszubauen, sind automatisierte Prozesse noch längst nicht in den Unternehmen etabliert. Dies zeigt der aktuelle „State of DevOps Market Segmentation Report“ von Puppet. lesen

Container helfen beim Testen verteilter Software

Testing Infrastructure as Code

Container helfen beim Testen verteilter Software

Der Einsatz von Containern vereinfacht nicht nur das produktive Deployment verteilter Software-Komponenten. Auch beim Erstellen einer Testinfrastruktur bietet die Technologie völlig neue Möglichkeiten. lesen

Was zeichnet „gute“ Continuous Delivery aus?

Best Practices für mehr Software-Qualität

Was zeichnet „gute“ Continuous Delivery aus?

Wer die Prinzipien von Continuous Integration befolgt, ist bereit für Continuous Delivery, kurz CD. Doch ähnlich wie bei der kontinuierlichen Integration glauben viele Unternehmen, dass sie mit CD viel besser zurechtkommen, als es in der Realität der Fall ist. lesen

Alternativen zu Puppet

Application Release Automation Tools

Alternativen zu Puppet

Tools für Application Release Automation, kurz ARA, sind ein fester Bestandteil der Continuous Delivery Toolchain. Puppet ist wohl das bekannteste ARA-Tools, aber es gibt auch Alternativen, die bereits von den Analysten bei Gartner und Forrester evaluiert wurden. lesen

Die DevOps-Phasen Planung und Erstellung

Lifecycle Management mit Atlassian-Tools, Teil 1

Die DevOps-Phasen Planung und Erstellung

Atlassian bietet über den DevOps-Lebenszyklus hinweg eine komplette Toolchain an, mit der sich die Phasen Plan, Build, Continuous Integration, Deploy, Operate und Continuous Feedback realisieren lassen. Der agile Lifecycle soll eine effiziente Entwicklungsarbeit und fehlerfreie Bereitstellung fördern. lesen

DevOps in der Datenbankentwicklung

[Gesponsert]

Mehr Agilität ohne Risiko

DevOps in der Datenbankentwicklung

Datenbankumgebungen erweisen sich bei der Umsetzung von DevOps-Konzepten oft als Flaschenhals, denn die Datenbankentwicklung birgt ganz eigene Herausforderungen. Doch mit dem Wissen um diese Probleme und den richtigen Tools ist auch hier mehr Agilität möglich. 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)