Konzepte
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.

