47.5. Einführung in Subversion

Subversion ist ein freies Open Source Versionskontrollsystem und wird häufig als Nachfolger von CVS gehandelt; somit treffen bereits vorgestellte Eigenschaften von CVS auch auf Subversion zum großen Teil zu. Es bietet sich vor allem an, wenn man die Vorteile von CVS genießen möchte, ohne dessen Nachteile in Kauf nehmen zu müssen. Viele dieser Eigenschaften wurden bereits ansatzweise in Abschnitt 47.1.3, „Subversion“ vorgestellt.

47.5.1. Einrichten eines Subversion-Servers

Das Einrichten eines Repository auf einem Server ist eine recht einfache Prozedur. Hierzu stellt Subversion ein eigenes Administrationstool, svnadmin, zur Verfügung. Um ein neues Repository zu erstellen, gibt man ein:

svnadmin create /pfad/zum/repository

Weitere Optionen erhalten Sie mit svnadmin help. Im Gegensatz zu CVS verwendet Subversion nicht RCS als Basis, sondern die Berkeley Datenbank. Achten Sie darauf, ein Repository nicht auf entfernten Dateisystemen wie NFS, AFS oder Windows SMB anzulegen. Die Datenbank benötigt POSIX Lockingmechanismen, welche die genannten Dateisysteme nicht bieten.

Um den Inhalt eines existierenden Repositories einzusehen, gibt es den Befehl svnlook:

svnlook info /pfad/zum/repository

Damit andere Benutzer auf das Repository zugreifen können, muss ein Server konfiguriert werden. Hierbei kann auf den Webserver Apache zurückgegriffen werden oder man verwendet svnserve, den hauseigenen Server von Subversion. Läuft svnserve einmal, kann über die URL svn:// oder svn+ssh:// in einer URL auf das Repository zugegriffen werden. Über die Konfigurationsdatei /etc/svnserve.conf können Sie Benutzer einstellen, die sich dann beim Aufruf von svn authentifizieren müssen.

Die Entscheidung für Apache oder svnserve hängt von vielen Faktoren ab. Hier empfiehlt sich ein Blick in das Subversion-Buch (Informationen hierzu siehe Abschnitt 47.5.3, „Weiterführende Informationen“).

47.5.2. Benutzung

Um auf ein Subversion-Repository zuzugreifen, gibt es den Befehl svn (ähnlich cvs). Ist der Server korrekt eingerichtet (mit entsprechendem Repository), kann der Inhalt von jedem Client darauf wie folgt angezeigt werden:

svn list http://svn.beispiel.de/pfad/zum/projekt

oder

svn list svn://svn.beispiel.de/pfad/zum/projekt

Mit dem Befehl svn checkout können Sie ein existierendes Projekt in das aktuelle Verzeichnis abspeichern (engl. check out):

svn checkout http://svn.beispiel.de/pfad/zum/projekt projektname

Mit dem Auschecken erhält man ein neues Unterverzeichnis projektname auf dem Client. In diesem kann man beliebige Änderungen (hinzufügen, kopieren, umbenennen, löschen) durchführen:

svn add file
svn copy oldfile newfile
svn move oldfile newfile
svn delete file

Jede dieser Befehle ist nicht nur auf Dateien, sondern auch auf Verzeichnisse anwendbar. Des Weiteren kann Subversion auch sog. properties (Eigenschaften) zu einer Datei oder Verzeichnis festhalten:

svn propset license GPL foo.txt

Setzt im vorigem Beispiel für die Datei foo.txt die Eigenschaft license auf den Wert GPL. Durch svn proplist können Sie Eigenschaften anzeigen:

svn proplist --verbose foo.txt
Properties on 'foo.txt':
  license : GPL

Um Ihre Änderungen zu veröffentlichen, das heißt, auf dem Server zurückzuspielen, gibt man ein:

svn commit

Damit ein anderer Benutzer Ihre Änderungen in seinem Arbeitsverzeichnis eingespielt bekommt, muss er einen Abgleich mit dem Server über den folgenden Befehl vornehmen:

svn update

Im Gegensatz zu CVS kann der Status eines Subversion-Arbeitsverzeichnisses ohne Zugriff auf das Repository angezeigt werden:

svn status

Hierbei werden lokale Veränderungen in fünf Spalten angezeigt, die wichtigste Spalte ist die erste:

''

Keine Änderungen

'A'

Objekt wird als Hinzufügung angesetzt

'D'

Objekt wird zur Löschung angesetzt

'M'

Objekt wurde geändert

'C'

Objekt befindet sich im Konflikt

'I'

Objekt wurde ignoriert

'?'

Objekt befindet sich nicht unter Versionskontrolle

'!'

Objekt wird vermisst. Diese Markierung erscheint, wenn es ohne den svn-Befehl gelöscht oder verschoben wurde.

'~'

Objekt wurde als Datei verwaltet wurde jedoch durch ein Verzeichnis ersetzt oder umgekehrt.

Die zweite Spalte zeigt den Status von Eigenschaften (sog. properties) an. Alle weiteren Spalten können im Subversion-Buch nachgelesen werden. Sollten Sie einmal die genauen Parameter eines Befehls nicht mehr wissen, hilft svn help weiter:

svn help proplist
proplist (plist, pl): List all properties on files, dirs, or revisions.
usage: 1. proplist [PATH...]
       2. proplist --revprop -r REV [URL]

  1. Lists versioned props in working copy.
  2. Lists unversioned remote props on repos revision.
...

47.5.3. Weiterführende Informationen

Erste Anlaufstelle ist die Homepage von Subversion unter http://subversion.tigris.org. Ein sehr empfehlenswertes, komplettes englischsprachiges Buch finden Sie nach der Installation des Pakets subversion-doc im Verzeichnis file:///usr/share/doc/packages/subversion/html/book.html. Dies ist auch online unter http://svnbook.red-bean.com/svnbook/index.html erhältlich.