Grundlegendes

Was macht Subversion?

Dieser Artikel beschreibt die Idee einer Versionsverwaltung anhand des Subversion-Clients für die Text-Konsole. Hierbei werden die Texte von einem Server verwaltet und können von mehreren Clients auch gleichzeitig bearbeitet werden. Der Subversion-Client ist für Linux, MacOS und Windows verfügbar.

Für eine Versionsverwaltung gibt es zwei gute Gründe:

  1. Legt man sie auf einem eigenen Server an, lässt sich so einfach ein Backup realisieren.
  2. Arbeitet man auf mehreren Rechnern und/oder mit mehreren Entwicklern an einem Projekt, so liefert der Subversion-Server immer die aktuellen Quelltexte und fügt die Änderungen der einzelnen Programmierer wieder zu einem gemeinsamen Quelltext zusammen.

Schon allein für die Backup-Funktion eignet sich ein Subversion-Server auch für Projekte, die nur von einem einzelnen Entwickler betreut werden.

Subversion eignet sich nicht ausschließlich für Programmierer. Es ist spezialisiert für (ASCII-)Textdateien, also auch interessant für Webdesigner oder Buchautoren. Textdateien werden zeilenweise gespeichert, bei neueren Versionen werden lediglich die geänderten Zeilen gespeichert. Aber auch binäre Dateien können mit Hilfe von Subversion verwaltet werden - wenn auch nicht so platzsparend, da hier immer die vollständige Datei ausgetauscht werden muss. Subversion eignet sich damit für beliebige Projekte und Daten jeglicher Art.

Grundlegende Arbeitsweise und verwendete Vokabeln

Die Sourcecodes werden auf dem Subversion-Server in einem sogenannten Repository gespeichert. Ein Repository ist wie ein Verzeichnis auf der Festplatte, allerdings werden die Dateien hier nie überschrieben. Jede Veränderung, die sogenannte Revision, erhält eine eigene Revisionsnummer und kann über diese Nummer jederzeit wieder abgerufen werden. Auf der lokalen Festplatte wird eine Arbeitskopie gespeichert. Der Vorgang eine Arbeitskopie auf dem lokalen Rechner zu erstellen wird Checkout genannt.

Die aktuelle Version nennt sich Headversion. Fordert man als Arbeitskopie also den aktuellen Quelltext an, erhält man ausschließlich die Headversion. Die Arbeitskopie auf dem Computer kann nun nach Belieben verändert werden und anschließend werden die Änderungen wieder an den Subversion-Server übertragen. Dieser Schritt heißt Commit. Nach einem erfolgreichen Commit entsteht eine neue Revision.

Zu Mehreren arbeiten

Aus einem Repository dürfen beliebig viele Entwickler beliebig häufig auschecken. Solange alle Entwickler unterschiedliche Dateien verändern, können die neuen Versionen ohne Probleme wieder zusammengefügt werden.

Arbeiten Sie nun an einer Datei, an der auch ein anderer Entwickler gearbeitet hat, bemüht sich Subversion die Änderungen zusammenzufügen. Solange Ihre Änderungen nicht einen Bereich berühren, der durch einen anderen Entwickler verändert wurde, ist das Zusammenführen auch problemlos möglich. Sollten Sie und der andere Entwickler jedoch Änderungen an der gleichen Stelle vorgenommen haben, kann Subversion nicht mehr entscheiden, wie die Änderungen zusammengefügt werden sollen. Es entsteht ein Konflikt zwischen Ihrer und der aktuellen Headversion: der Commit wird abgebrochen.

Um diesen Konflikt zu lösen, aktualisieren Sie ihre Arbeitskopie (Update), so dass auf Ihrer Arbeitskopie die Headversion eingefügt wird. Hierbei werden in Ihrer Arbeitskopie die Stellen markiert, an denen die Konflikte aufgetreten sind. Diese Konflikte müssen Sie anschließend von Hand prüfen und in einen gültigen Zustand überführen (Resolve). Die geprüfte, korrigierte Arbeitskopie können Sie anschließend wieder an den Subversion-Server übermitteln.

Es entsteht eine neue Revision und Ihre Arbeitskopie entspricht nun der aktuellen Headversion, die ab sofort an alle Entwickler verteilt wird, sobald diese ihre Arbeitskopie aktualisieren.

Die Hilfsfunktion

Die Subversionbefehle verfügen über eine ausführliche Hilfsfunktion. So lässt sich mit

svn help

eine Übersicht über die Anweisungen und Attribute des svn Befehls ausgeben. Benötigt man genauere Informationen zu einem Befehl, so fügt man die Anweisung an den jeweiligen Befehl hinzu, als Beispiel:

svn help update