Veit Schiele Communications

Veit Schiele Communications

Konzepte

Konzepte und Beispiele der Versionskontrolle.
erstellt von Veit Schielezuletzt verändert: 29.09.2009 17:47 Uhr © Veit Schiele 2006–2009
Artikelaktionen

Repository

Subversion ist ein zentralisiertes System zum Austausch von Informationen. Dabei ist das sog. Repository der zentrale Datenspeicher, der Informationen in Form eines Dateibaums speichert. Eine beliebige Anzahl von Clients kann sich mit diesem Repository verbinden und dort Dateien lesen oder Schreiben. Durch Schreiben des Clients in das Repository werden die Informationen auch für andere verfügbar.

Die Besonderheit von Subversions Repository ist nun, dass es sich jede Änderung an jeder Datei oder am Verzeichnisbaum merkt. Normalerweise liest ein Client nur die letzte Version der Daten aus dem Repository, er hat aber auch die Möglichkeit, vorherige Stände der Daten anzusehen: er kann sich z.B. auch die Dateien vom vergangenen Freitag anzeigen lassen oder nach der Person fragen, die die Datei zuletzt geändert hat und welche Änderungen diese Person vorgenommen hat.

Versionierungsmodell

Das grundsätzliche Problem für Versionskontrollsysteme ist, wie das System Benutzern erlauben kann, Informationen zu teilen und gleichzeitig verhindert, dass sie ihre Änderungen im Repository überschreiben.

Subversion löst dieses Problem, indem der Client jedes Benutzers eine private Arbeitskopie des Repository erzeugt. Die Benutzer können dann parallel arbeiten und ihre private Kopie verändern. Schließlich werden die privaten Kopien zu einer neuen endgültigen Version zusammengeführt.

Versucht ein Client seine Änderungen freizugeben, dann informiert ihn des Repository gegebenenfalls darüber, dass seine Datei seit dem letzten erstellen einer Arbeitskopie verändert worden ist. Dann kann der Client den Versuch unternehmen, alle Änderungen aus dem Repository in seine Arbeitskopie der Datei einzupflegen. Falls sich die Änderungen nicht überschneiden, kann anschließend die Arbeitskopie ins Repository zurückgespeichert werden. Überlappen sich hingegen die Änderungen, wird ein Konflikt angezeigt und die sich überlappenden Änderungen angezeigt. Der Benutzer kann dann von auswählen, welche der beiden Änderungen übernommen werden soll und die händisch zusammengeführte Datei ins Repository zurückspeichern.

Arbeitskopien

Eine Subversion-Arbeitskopie ist ein gewöhnlicher Dateibaum in Ihrem lokalen Dateisystem, der eine Sammlung Dateien enthält. Eine Arbeitskopie enthält noch ein paar zusätzliche Dateien, die von Subversion erzeugt und verwaltet werden, um Befehle ausführen zu können. Im wesentlichen enthält jedes Verzeichnis in Ihrer Arbeitskopie ein Unterverzeichnis .svn: Die Dateien in diesen Verzeichnissen helfen Subversion zu erkennen, welche Dateien noch nicht freigegebene Änderungen enthalten und welche Dateien im Vergleich zur Arbeit anderer veraltete sind.

Um eine Arbeitskopie zu bekommen müssen Sie einen Teilbaum des Repositorys auschecken, z.B.:

svn checkout https://dev.veit-schiele.de/svn/vs.policy/trunk vs.policy

Angenommen, Sie ändern eine Datei, wird im .svn-Verzeichnis das Änderungsdatum und der Originalinhalt der Datei gespeichert. Die Änderungen werden jedoch erst öffentlich freigegeben, wenn Sie die Änderungen committen, z.B.:

svn commit vs.policy/vs/policy/setuphandlers.py

Erst nach diesem committen können auch andere Benutzer eine Arbeitskopie auschecken, die Ihre Änderungen enthält.

Falls andere Benutzer die von Ihen geänderte Datei schon vor Ihrem committen ausgecheckt haben, können deren Arbeitskopien aktualisiert werden, z.B. mit:

svn update

Revisionen

Jedes Mal, wenn das Repository einen Commit akzeptiert, erzeugt das einen neuen Zustand im Verzeichnisbaum, Revision genannt. Jede neue Revision ist um eins größer als die vorherige. Die Revision eines neu erzeugten Repositorys hat die Nummer Null und enthält nichts außer dem leeren Wurzelverzeichnis.

Anders als viele andere Versionskontrollsysteme gilt Subversions Revisionsnummer für ganze Bäume, nicht für einzelne Dateien. Daher muss eine Datei in unterschiedlichen Revisionen nicht notwendigerweise verschieden sein.

Schlüsselwörter für Revisionen

Neben einer exakten Revisionsnummer gibt es in Subversion auch einige Schlüsselwörter für Revisionen:

HEAD
Die neueste Revision im Repository.
BASE
Die »saubere« Revision eines Objekts im Arbeitsverzeichnis.
COMMITTED
Die letzte Revision, in der sich das Objekt bis einschließlich BASE geändert hat.
PREV
Die Revision genau vor der letzten Änderung (COMMITTED) an einem Objekt.
Artikelaktionen