Wikipedia · einfach zusammengefasst · Stand
Versionsverwaltung
Eine Versionsverwaltung ist ein System, das zur Erfassung von Änderungen an Dokumenten oder Dateien verwendet wird. Alle Versionen werden in einem Archiv …
Inhalt6 Abschnitte
Grundidee und Nutzen
Eine Versionsverwaltung ist ein System, das Änderungen an Dokumenten oder Dateien erfasst. Jede Version wird in einem Archiv mit Zeitstempel und Benutzerkennung gespeichert und kann später wiederhergestellt werden. Solche Systeme werden besonders in der Softwareentwicklung genutzt, um Quelltexte zu verwalten, kommen aber auch in Büroanwendungen, Content-Management-Systemen und Wikis vor.
Wichtig ist Versionsverwaltung, weil sie nachvollziehbar macht, wer wann was geändert hat, alte Stände wiederherstellen kann und mehreren Personen die gemeinsame Arbeit an denselben Dateien ermöglicht. Bei Wikis wie Wikipedia entsteht nach jeder Änderung eines Artikels eine neue Version. Die Versionen bilden dort meist eine Kette, in der die letzte Version gültig ist. Bei Fehlern oder versehentlichen Änderungen kann man zu einer früheren Version zurückkehren.
Versionsverwaltung ist eine Form des Variantenmanagements. Für Versionsverwaltungssysteme ist die Abkürzung VCS, von englisch Version Control System, gebräuchlich.
Hauptaufgaben
Zu den Hauptaufgaben einer Versionsverwaltung gehören:
- Änderungen werden protokolliert, sodass jederzeit nachvollziehbar ist, wer wann was geändert hat.
- Alte Stände einzelner Dateien können wiederhergestellt werden. Dadurch lassen sich versehentliche Änderungen rückgängig machen.
- Einzelne Stände eines Projekts werden archiviert, sodass auf alle Versionen zugegriffen werden kann.
- Der gemeinsame Zugriff mehrerer Entwickler auf Dateien wird koordiniert.
- Mehrere Entwicklungszweige eines Projekts können gleichzeitig entwickelt werden. Ein solcher Entwicklungszweig heißt Branch. Er darf nicht mit einem Fork verwechselt werden, also der Abspaltung eines Projekts in eine neue, unabhängige Versionsverwaltung.
Zentrale Begriffe
Ein Branch, auf Deutsch Zweig, ist eine Verzweigung zu einer neuen Version. Dadurch können unterschiedliche Versionen im selben Projekt parallel weiterentwickelt werden. Änderungen aus einem Branch können wieder in einen anderen Branch einfließen. Dieser Vorgang heißt Merging, auf Deutsch Verschmelzen.
Der Hauptentwicklungszweig wird je nach System unterschiedlich bezeichnet: Bei Subversion heißt er oft Trunk, bei Git Main, früher häufig Master. Branches können zum Beispiel für neue Hauptversionen einer Software, für Entwicklungszweige verschiedener Betriebssysteme oder für experimentelle Versionen genutzt werden.
Ein Fork liegt vor, wenn ein Zweig in einer neuen, unabhängigen Versionsverwaltung entsteht. Ein Tag ist ein frei wählbarer Bezeichner, mit dem ein bestimmter Stand markiert werden kann.
Arbeitsweise und Speicherprinzip
Die Dateien eines Projekts liegen in einem Repository, also einem Archiv oder Aufbewahrungsort. Damit Entwickler mit den Dateien arbeiten können, erzeugen sie daraus einen Verzeichnisbaum aus gewöhnlichen Dateien. Dieser Verzeichnisbaum heißt Arbeitskopie.
Ein wichtiger Teil des Versionsverwaltungssystems synchronisiert die Arbeitskopie mit dem Repository. Das Übertragen einer Version aus dem Repository in die Arbeitskopie heißt Checkout, Aus-Checken oder Aktualisieren. Die umgekehrte Übertragung von der Arbeitskopie in das Repository heißt Check-in, Einchecken oder Commit. Solche Programme können über die Kommandozeile, über eine grafische Benutzeroberfläche oder als Plugin in integrierten Softwareentwicklungsumgebungen bedient werden.
Versionsverwaltungssysteme speichern meist nicht jede Version vollständig, sondern nur die Unterschiede zwischen zwei Versionen. Dadurch wird Speicherplatz gespart und eine große Zahl von Versionen kann archiviert werden. Häufig nutzen die Systeme dafür ein eigenes Dateiformat oder eine Datenbank. Die gewünschte Version wird beim Abruf aus den archivierten Versionen rekonstruiert.
Arten der Versionsverwaltung
Es gibt drei grundlegende Arten der Versionsverwaltung: lokale, zentrale und verteilte Versionsverwaltung.
Bei der lokalen Versionsverwaltung wird oft nur eine einzelne Datei versioniert. Diese ältere Form wurde mit Werkzeugen wie SCCS und RCS umgesetzt. Sie kommt auch in Büroanwendungen vor, die Versionen eines Dokuments direkt in der Datei speichern. Auch technische Zeichnungen können durch einen Änderungsindex versioniert werden.
Die zentrale Versionsverwaltung ist als Client-Server-System aufgebaut. Das Repository kann über ein Netzwerk genutzt werden. Eine Rechteverwaltung sorgt dafür, dass nur berechtigte Personen neue Versionen in das Archiv legen können. Die Versionsgeschichte liegt dabei nur im Repository. Dieses Konzept wurde durch das Open-Source-Projekt Concurrent Versions System, kurz CVS, populär, mit Subversion, kurz SVN, neu implementiert und von vielen kommerziellen Anbietern verwendet.
Die verteilte Versionsverwaltung, kurz DVCS für distributed VCS, verwendet kein zentrales Repository als technische Voraussetzung. Jede Person, die an dem Projekt arbeitet, hat ein eigenes Repository und kann es mit beliebigen anderen Repositorys abgleichen. Die Versionsgeschichte ist dadurch verteilt. Änderungen können lokal verfolgt werden, ohne Verbindung zu einem Server. In der Praxis gibt es trotzdem meist ein offizielles Repository, das neue Projektbeteiligte zu Beginn klonen, also auf ihr lokales System kopieren.
In verteilten Systemen entstehen bei gleichzeitigen Änderungen derselben Datei zunächst keine Konflikte im Sinn einer blockierten Bearbeitung. Widersprechende Versionen können parallel existieren und später zusammengeführt werden. Dadurch entsteht ein gerichteter azyklischer Graph, also eine Polyhierarchie, statt nur einer einfachen Kette von Versionen. In größeren Softwareprojekten werden oft einzelne Features oder Featuregruppen getrennt entwickelt und von Personen mit Integrator-Rolle geprüft und zusammengeführt. Verteilte Systeme bieten systembedingt keine Locks, können aber leistungsfähige, weitgehend automatische Merge-Mechanismen bereitstellen. Einfachere Patchverwaltungssysteme bilden eine Unterart, bei der Änderungen nur in eine Richtung in Produktivsysteme eingespeist werden.
Konzepte und Beispiele
Beim Konzept Lock Modify Write, auch Lock Modify Unlock genannt, spricht man von pessimistischer Versionsverwaltung. Eine Datei muss vor der Änderung gesperrt und danach wieder freigegeben werden. Während der Sperre verhindert das System Änderungen durch andere Benutzer. Der Vorteil ist, dass kein Zusammenführen von Versionen nötig ist, weil immer nur ein Entwickler eine Datei bearbeiten kann. Der Nachteil ist, dass andere warten müssen, bis die Datei freigegeben wird. Binärdateien benötigen in der Regel diese Arbeitsweise, weil verteilte Änderungen daran meist nicht automatisch synchronisiert werden können. Ältere Vertreter sind das Revision Control System und Visual SourceSafe. Verteilte Versionsverwaltungssysteme kennen diese Arbeitsweise systembedingt nicht.
Beim Konzept Copy Modify Merge dürfen mehrere Benutzer dieselbe Datei gleichzeitig ändern. Danach werden die Änderungen automatisch oder manuell zusammengeführt. Diese optimistische Versionsverwaltung erleichtert die Arbeit, weil Änderungen nicht vorher angekündigt werden müssen. Besonders bei räumlich getrennten Entwicklern, etwa in Open-Source-Projekten, ermöglicht sie effizientes Arbeiten. Problematisch sind Binärdateien, wenn kein passendes Werkzeug zum Zusammenführen vorhanden ist. Alle modernen zentralen und verteilten Systeme setzen dieses Verfahren um; manche unterstützen zusätzlich Lock Modify Write für bestimmte Dateien.
Eine besondere Form ist die objekt-basierte Versionierung. Dabei werden nicht nur Dateien, sondern Objekte als Instanzen eines Schemas versioniert gespeichert. Das System muss die jeweiligen Objekttypen verstehen und kann die Semantik der enthaltenen Daten interpretieren. Solche Objekte werden gewöhnlich nicht dateibasiert, sondern in einer Datenbank gespeichert. Produktdatenmanagement-Systeme, kurz PDM-Systeme, arbeiten nach diesem Prinzip.
Beispiele für Versionsverwaltungssysteme sind zentrale Open-Source-Systeme wie MediaWiki, SCCS, RCS, CVS und Subversion sowie verteilte Systeme wie Bazaar, BitKeeper, Darcs, Fossil, Git, GNU arch, Mercurial und Monotone. Zu proprietären Systemen gehören unter anderem Alienbrain, Perforce, Team Foundation Server, Visual SourceSafe, ClearCase, IBM Rational Synergy, PTC Integrity, SAP Design Time Repository, versiondog, Sourcegear Vault und Rational Team Concert.