Unter einer Versionsverwaltung versteht man ein System, welches typischerweise in der Softwareentwicklung zur Versionierung und um den gemeinsamen Zugriff auf Quelltexte zu kontrollieren, eingesetzt wird. Hierzu werden alle laufenden Änderungen erfasst und alle Versionsstände der Dateien in einem Archiv mit Zeitstempel und Benutzerkennung gesichert. Die Versionsverwaltung ist eine Form des Variantenmanagements.
Es wird sichergestellt, dass jeder Benutzer mit dem aktuellen Stand arbeitet oder auf Wunsch auf die archivierten Stände zugreifen kann. Dadurch ist eine Versionsverwaltung nicht nur für professionelle Entwickler in großen Teams, sondern auch für einzelne Entwickler interessant. Es kann jederzeit eine ältere Version aufgerufen werden, falls eine Änderung nicht funktioniert und man sich nicht mehr sicher ist, was nun alles geändert wurde.
Ein Beispiel ist auch die Wikipedia. Hier erzeugt die Software nach jeder Änderung eines Artikels eine neue Version. So kann jeder genau nachvollziehen, wer was geändert hat. Bei Bedarf - beispielsweise bei versehentlichen Änderungen - kann man zu einer früheren Version zurückkehren.
Auch in technischen Zeichnungen wird zum Beispiel durch einen Änderungsindex eine Versionsverwaltung angewandt.
Für Versionsverwaltungssysteme sind die Abkürzungen VCS (Version Control System) oder SCM (Source Code/Control Managementsystem) gebräuchlich.
Systemaufbau
Das zentrale Archiv wird als Repository (engl. Behälter, Aufbewahrungsort) bezeichnet. Die meisten Systeme verwenden hierfür ein eigenes Dateiformat (oder eine Datenbank). Die Versionsverwaltungssoftware speichert dabei üblicherweise nur die Unterschiede zwischen zwei Versionen um Speicherplatz zu sparen. Dadurch kann eine große Zahl von Versionen archiviert werden. Durch dieses Speicherformat kann jedoch nur mit der Software des Versionsverwaltungssystem auf die Daten zugegriffen werden, die die gewünschte Version bei einem Abruf unmittelbar aus den abgelegten Schnipseln "zusammenbaut". Solche Software ist häufig als Client-Server-System aufgebaut, sodass der Zugriff auf ein Repository auch über Netzwerk erfolgen kann.
Damit die in der Softwareentwicklung eingesetzten Programme wie z.B. Compiler mit den im Repository abgelegten Dateien arbeiten können ist es erforderlich, dass jeder Entwickler sich den aktuellen (oder einen älteren Stand) des Projektes in Form eines Verzeichnisbaumes aus herkömmlichen Dateien erzeugen kann. Ein solcher Verzeichnisbaum wird als Arbeitskopie bezeichnet. Ein wichtiger Teil des Versionsverwaltungssystems ist ein Programm, das in der Lage ist, diese Arbeitskopie mit den Daten des Repositories zu synchronisieren. Das Übertragen einer Version aus dem Repository in die Arbeitskopie wird als Checkout oder Aktualisieren bezeichnet, während die umgekehrte Übertragung als Checkin oder Commit genannt wird. Solche Programme sind entweder kommandozeilenorientiert, mit grafischer Benutzeroberfläche oder als Plugin für integrierte Softwareentwicklungsumgebungen ausgeführt. Häufig werden mehrere dieser verschiedenen Zugriffsmöglichkeiten wahlweise bereitgestellt.
Hauptaufgaben eines Versionsverwaltungssystems
- Protokollierungen der Änderungen - Es kann jederzeit nachvollzogen werden, wer wann was geändert hat.
- Wiederherstellung von alten Ständen einzelner Dateien - Somit können versehentliche Änderungen jederzeit wieder rückgängig gemacht werden.
- Archivierung der einzelnen Release-Stände eines Projektes - Dadurch ist es jederzeit möglich auf alle ausgelieferten Versionen zuzugreifen.
- Koordinierung des gemeinsamen Zugriffs von mehreren Entwicklern auf die Dateien
- Gleichzeitige Entwicklung mehrerer Entwicklungszweige (engl. Branches) eines Projektes (z.B. stabile Release-Version und Entwicklerversion mit größeren, nicht getesteten Änderungen) - Hier wird der Entwickler bei der Übernahme von einzelnen Änderungen zwischen den Zweigen und der Hauptversion unterstützt.
Arbeitsweisen der Versionsverwaltung
Lock Modify Write
Dies ist die traditionelle Arbeitsweise eines Versionsverwaltungssystems. Einzelne Dateien müssen vor einer Änderung durch den Benutzer gesperrt und nach Abschluss der Änderung wieder freigegeben werden. Während sie gesperrt sind, verhindert das System Änderungen anderer Benutzer.
Copy Modify Merge
Ein solches System lässt gleichzeitige Änderungen mehrerer Benutzer an einer Datei zu. Anschließend werden diese Änderungen automatisch oder manuell zusammengeführt (Merge). Somit wird die Arbeit des Entwicklers wesentlich erleichtert, da Änderungen nicht im Voraus angekündigt werden müssen. Insbesondere, wenn mehrere Entwickler räumlich getrennt arbeiten, wie es beispielsweise bei Open-Source Projekten der Fall ist, ermöglicht dies deutlich flüssigeres Arbeiten.