Überblick über alle Versionen

Subversion in Aktion

07.03.2008 von Stephan  Lamprecht
Ob die gemeinsame Arbeit an Dokumenten oder der Wunsch, sich die neueste Entwicklerversion einer Software zu beschaffen: an Subversion führt kein Weg vorbei. Wir stellen das Werkzeug im Detail vor.

Die gemeinsame Arbeit mit mehreren Personen an einem Projekt löst innerhalb eines Teams immer die gleichen Fragen aus. Wer bearbeitet eigentlich gerade ein Dokument? Habe ich wirklich den aktuellen Stand, oder mache ich die Arbeit jetzt doppelt?

Ist das Team klein genug, klärt eine Mail oder ein Telefonanruf die Situation. Bei großen und internationalen Projekten, wie der Entwicklung des KDE oder Gnome-Desktops wäre es ein hoffnungsloses Unterfangen, untereinander den Überblick über den aktuellen Stand der einzelnen Komponenten zu behalten. Hier springt eine Versionsverwaltung ein.

Aufgaben einer Versionsverwaltung

Für eine Versionsverwaltung wie Subversion, die in diesem Artikel ausführlicher vorgestellt werden soll, ist es ohne Belang, welche Daten damit verwaltet werden. Das können der Quellcode eines Programms, die einzelnen Elemente eines umfangreichen Dokuments oder einzelne Dateien sein. Das System behält den Überblick, welche Datei gerade aktuell ist, und sorgt zugleich dafür, dass die Teilnehmer des Projekts auch stets nur mit dem letzten Stand arbeiten.

Die Weiterentwicklung von Programmen wie etwa KDE erfolgt mit Unterstützung der Versionsverwaltung Subversion. Damit erklärt sich auch der Hinweis, „ins SVN“ zu schauen, den Sie auf vielen Internet-Seiten oder Newsgroup-Beiträgen bekommen. Denn im so genannten Repository erhalten Sie stets den aktuellen Quellcode.

Ihren eigenen Subversion-Server installieren

Ob Sie allein oder mit anderen an Dokumenten arbeiten: Der Einsatz von Subversion lohnt immer dann, wenn Sie regelmäßig auf unterschiedlichen Systemen und an verschiedenen Orten arbeiten und mit den Versionen nicht durcheinanderkommen wollen. Subversion eignet sich ebenfalls hervorragend, die Arbeit in kleineren Teams zu organisieren, egal ob Sie den Server lediglich im lokalen Netzwerk oder im Internet verfügbar machen. Dank DSL-Flatrates und Diensten wie Dyndns ist heute jeder Nutzer in der Lage, einen eigenen kleinen Server zu betreiben, ohne gleich in ein teures Server-Angebot bei einem Hoster investieren zu müssen. Sowohl Open Suse als auch Debian GNU/Linux und Ubuntu stellen die notwendigen Software-Komponenten bereit, unter anderen Distributionen ist das Vorgehen ähnlich. Wir erklären die Konfiguration im Folgenden am Beispiel von Ubuntu.

Wer sich mit dem Gedanken trägt, die Weiterentwicklung von Linux mit eigenen Beiträgen zu unterstützen, kann mit dem eigenen Server Erfahrungen sammeln, ohne gleich die Subversion-Systeme von KDE & Co. nutzen zu müssen.

Um Subversion zu installieren, spielen Sie das Programm einfach über den Paketmanager ein. Unter Ubuntu genügt hier das Paket „subversion“. Eine Suche im Paketmanager nach subversion liefert eine ganze Reihe weiterer Pakete, darunter etwa Kdesvn. Dabei handelt es sich um eine grafische Oberfläche für Subversion. Allerdings sollten Sie sich zunächst auf der Konsole mit der grundlegenden Funktionsweise und dem Aufbau von Subversion vertraut machen, dann fällt auch die Arbeit mit einer solchen Oberfläche leichter.

Der grundlegende Aufbau eines Repositories

Bei der Arbeit mit Versionsarchiven hat sich eine Struktur durchgesetzt, die Ihnen auch beim Umgang mit öffentlichen Repositories aus der Open-Source-Szene begegnen wird. Üblicherweise finden Sie dort drei Ordner: „Trunk“ speichert den jeweils aktuellen Stand Ihres Projekts. Bei der Software-Entwicklung finden Sie in diesem Verzeichnis die aktuelle und stabile Version.

Im Ordner tags werden in der Regel Zwischenstände abgelegt, während unter branches so genannte Zweige landen. In ihnen arbeiten Entwickler oder Gruppen parallel an der Version, die aus dem Ordner trunk stammt. Um den Umgang mit offiziellen Repositories der Linux-Entwickler zu üben, ist es eine gute Idee, wenn Sie Ihre Projektarbeit ähnlich organisieren.

Erstmals Daten ins Repository übertragen

Nachdem alle vorbereitenden Arbeiten abgeschlossen sind, können Sie nun daran gehen, erstmals Dateien in das Repository zu schieben. Sammeln Sie zunächst alle Dokumente, die zu einem Ihrer Projekte gehören, und legen Sie diese in einem gemeinsamen Ordner auf Ihrer Festplatte ab.

Gleich geht’s los: Mit diesem Befehl legt Subversion Ihr erstes Repository an.

Im nächsten Schritt legen Sie in Ihrem Home-Verzeichnis ein so genanntes lokales Repository an. Diese Struktur dient der Verwaltung Ihres Projekts. Öffnen Sie dazu ein Terminal-Fenster und tragen Sie dort den Befehl ein:

svnadmin create /home/<Benutzer>/mein_repository

Für <Benutzername> tragen Sie Ihren Linux-Benutzernamen ein, mein_repository können Sie durch eine Projektbezeichnung ersetzen. Im nächsten Schritt übernehmen Sie die Dateien Ihres Projekts in den Datenspeicher. Nehmen wir an, dass Sie die Dateien, die zum Projekt gehören, in Ihrem Home-Verzeichnis im Ordner Projekt1 gespeichert haben, dann geben Sie in der Konsole folgenden Befehl ein:

svn import /home/<Benutzername>/Projekt1 file:///home/<Benutzername>/mein_repository -m ''Erstversion''

Dieser Befehl importiert den Inhalt aus dem Verzeichnis Projekt1. Dabei wird er zur besseren Orientierung mit dem Kommentar Erstversion versehen.

Subversion: Nun können Sie die Projektdateien dem Datenspeicher übergeben: Subversion schluckt alles klaglos.

Den Kommentar schalten Sie mit dem Parameter -m an. Hat Subversion diesen Vorgang ohne Fehlermeldung durchgeführt, können Sie die Ausgangsdateien des Projekts beruhigt löschen oder auf einem externen Datenträger ablegen. So kommen Sie gar nicht mehr auf den Gedanken, aus Versehen ein Dokument zu bearbeiten, das von Subversion nicht beobachtet wird.

Check it out baby

Ab sofort kümmert sich Subversion um die Verwaltung der Versionen Ihrer Arbeitsdateien. Bevor Sie mit Ihren Dokumenten arbeiten können, müssen Sie sie aus Subversion auschecken. Sie brauchen dazu zunächst einen Zielordner, in dem die Dateien landen sollen. Legen Sie dazu am besten in Ihrem Home-Verzeichnis einen Ordner an – etwa Arbeitskopien –, in dem Sie die Arbeitskopien der Daten speichern. Änderungen an den Inhalten der Dateien nehmen Sie immer nur an den Elementen dieser Arbeitskopie vor. Subversion wird auch nur dort nach Veränderungen suchen.

Dateien auschecken: Um mit den Projektdateien arbeiten zu können, müssen Sie diese zunächst als lokale Arbeitskopie auschecken.

Öffnen Sie ein Terminal-Fenster, und wechseln Sie dort in das Arbeitsverzeichnis. Tippen Sie dort den Befehl

svn co file:///home/<Benutzer>/mein_repository

Subversion entnimmt die Dateien nun seinem Speicher und antwortet Ihnen auf der Konsole mit einem kurzen Kommentar. Die Dokumente stehen damit für die erste Bearbeitung zur Verfügung.

Der Überarbeitungsprozess

In Ihrem neu angelegten Ordner Arbeitskopien liegt nun ein Unterordner mein_repository, der Kopien der ausgecheckten Dateien enthält, die Sie ganz nach Wunsch bearbeiten können. Subversion bekommt davon zunächst nichts mit. Um die Veränderungen in den Datenbestand aufzunehmen, müssen Sie die Dokumente erst wieder einchecken. Gerade wenn Sie im Team arbeiten, sollten Sie davon Gebrauch machen, beim Einchecken von Material auch einen Kommentar mitzuliefern. Zu einem späteren Zeitpunkt lassen sich die verschiedenen Versionen so leichter voneinander unterscheiden. Das Einchecken einer Datei nehmen Sie mit folgendem Kommando vor:

svn commit -m ‚"Ihr Kommentar" <Pfad_zur_Datei>

Sie erhalten auf der Konsole eine kurze Rückmeldung von Subversion, dass die nächste Revision Ihres Dokuments erfolgreich gespeichert wurde.

Bearbeitete Datei einchecken: Mit dem „commit“-Befehl übergeben Sie eine bearbeitete Datei wieder an die Versionsverwaltung zurück.

Natürlich kommt es immer wieder einmal vor, dass Sie bei der Arbeit an einem Projekt ein Dokument oder eine Datei neu anlegen, die dann integraler Bestandteil des Projekts werden soll.

Diese Datei ist Subversion noch unbekannt, da sie beim ersten Einchecken noch nicht existierte. Öffnen Sie daher ein Terminal-Fenster, wechseln Sie in Ihrem Arbeitskopien-Verzeichnis in das dortige Unterverzeichnis. und geben Sie Folgendes ein

svn add Datei1 Datei2 Datei3

Damit teilen Sie Subversion mit, dass es zukünftig auch diese Dateien überwachen soll. Damit Änderungen am Inhalt in das Repository wandern, müssen Sie die Dateien aus Ihrem Arbeitskopie-Verzeichnis mit dem svn commit-Befehl einchecken.

Umgekehrt kommt es immer wieder vor, dass ein Dokument nicht mehr benötigt wird und damit nicht mehr Bestandteil des Projekts sein soll. Subversion braucht sich also darum nicht weiter zu kümmern, was Sie dem Programm mitteilen müssen. Dazu nutzen Sie das Kommando:

svn remove <Name_der_Datei>

Die Datei verschwindet damit noch nicht. Sie wird lediglich für das Löschen vorgemerkt. Erst wenn Sie das nächste „commit“ für die Datei ausführen, verschwindet auch die Datei.

Den Überblick behalten

Das Ein- und Auschecken klingt zunächst einmal komplizierter als es ist. Allerdings müssen Sie sich schon ein wenig disziplinieren, um regelmäßig neue Arbeitsergebnisse auch in das Repository zu überstellen. Dennoch kommt es immer mal wieder vor, dass an so vielen Dokumenten gearbeitet wurde, dass nicht mehr ganz klar ist, welche Dateien eigentlich bereits Subversion überstellt worden sind. Das kann Ihnen die Versionsverwaltung ebenfalls verraten. Führen Sie auf der Konsole aus dem Verzeichnis Ihrer Arbeitskopie heraus folgenden Befehl aus:

svn status

Subversion gibt Ihnen nun eine Liste aller neuen und geänderten Dateien aus.

? notizen.txt
M aufgaben.txt

Jedes Dokument wird dabei mit einem Zeichen versehen, das Ihnen anzeigt, welche Informationen Subversion über die Datei besitzt. Ein Fragezeichen bedeutet, dass Subversion über gar keine Informationen zum Dokument verfügt.

Noch einzuchecken: Die Statusabfrage verrät, welche Dateien verändert wurden, aber noch nicht wieder in Subversion eingecheckt wurden.

Vermutlich haben Sie die Datei neu angelegt, aber vergessen, sie dem Projekt hinzuzufügen und einzu­checken. Der Buchstabe M steht bei der Ausgabe für „Modified“, die Datei wurde also verändert. Veränderte oder mit dem Status „Unbekannt“ versehene Dateien sollten Sie umgehend einchecken, damit ­diese in den Revisionszyklus aufgenommen werden.

Kommando zurück? Kein Problem!

Wenn Sie während des Arbeitsprozesses feststellen, dass ein älterer Stand einfach besser funktioniert hat oder noch fehlerfrei gewesen ist, spielt Subversion erst so richtig seine Stärken aus. Sie können problemlos bestimmte Versionen von Dateien reaktivieren oder das ganze Projekt auf einen von Ihnen ausgewählten Stand bringen.

Dazu verschaffen Sie sich zunächst einen Überblick über die aktuell im Repository gespeicherten Versionen. Auf der Konsole zeigt Ihnen Subversion übersichtlich alle verwalteten Revisionen an, wenn Sie den Befehl

svn log

aufrufen. Die Ausgabe enthält eine Liste, die etwa so aussieht:

r4 | sla | 2007-10-19 21:07:53 +0200 (Fr, 19 Okt 2007) | 1 line

Vierte Ueberarbeitung
------------------------------------------------------------------------
r3 | sla | 2007-10-19 20:40:32 +0200 (Fr, 19 Okt 2007) | 1 line

Ein neuer Gesichtspunkt
In der Liste sehen Sie die Versionsnummer, das Kürzel des Nutzers, der die Version eingecheckt hat, das dazugehörige Datum und schließlich auch noch den Kommentar, sofern einer hinterlegt wurde.

Übersicht über Revisionen: Die Abfrage der Subversion-Log-Datei verschafft Ihnen Übersicht, etwa wenn Sie gezielt einen anderen Stand einspielen möchten.

Sie haben nun die gleichen Möglichkeiten wie beim ersten Besuch des Repositories. Checken Sie mit dem Befehl svn checkout oder svn co einen bestimmten Versionsstand aus oder nutzen Sie die Update-Funktion von Subversion, um Ihre Arbeitskopie vollständig auf den Stand der Version zu bringen.

svn update

Ergänzen Sie den Funktionsaufruf mit -r -<Nummer der Version>. Ihr Arbeitsverzeichnis wird damit auf den gewünschten Stand gebracht.

Wo sind denn die Unterschiede?

Wer allein an seinen Dokumenten arbeitet, wird im Zweifel die Änderungen zwischen der Arbeitskopie und der Version innerhalb des Repositories im Kopf haben. Wenn mehrere Personen am gleichen Projekt arbeiten, sieht das anders aus.

Auch für diese Problemstellung bietet Subversion eine Lösung. Die Funktion diff zeigt die Unterschiede zwischen der eingecheckten Version einer Datei und Ihrer Arbeitskopie. Angenommen, Sie möchten die Unterschiede für die Datei notizen.txt ermitteln, geben Sie auf der Konsole aus dem Verzeichnis Ihrer Arbeitskopie heraus den Befehl

svn diff notizen.txt

ein. Subversion zeigt Ihnen die Unterschiede nun etwa so an:

Index: notizen.txt
=======================================
--- notizen.txt (Revision 5)
+++ notizen.txt (Arbeitskopie)
@@ -1,2 +1 @@
-Diese Zeile wurde gelöscht.
+Diese Datei wurde nun nachträglich bearbeitet, um den Unterschied zwischen Dateien zu zeigen.

Subversion grafisch: Mit einem grafischen Front-End lässt sich Subversion bequem bedienen, hier beispielsweise KDESVN.

An den vorangestellten Kürzeln können Sie erkennen, an welchen Stellen Inhalte eingefügt („+“) oder gelöscht („-“) worden sind.

Mehrere Projekte verwalten mit Subversion

Auch wenn die bisherigen Ausführungen vielleicht diesen Eindruck erweckt haben sollten: Ein Subversion-Repository ist nicht notwendigerweise auf ein einzelnes Projekt beschränkt. Für weitere Projekte legen Sie einfach in Ihren Grundordner, in dem Sie die Dateien des Projektes gesammelt haben, weitere Unterordner an, zum Beispiel Projekt2, Projekt3 und so weiter. Auf diese Weise legen Sie bei Bedarf auch die eingangs geschilderte Struktur mit einzelnen Branches an.

Wiederholen Sie dann die Vorgehensweise, um den Grundordner mit allen darin gespeicherten Inhalten in das Repository zu importieren. Subversion stört sich nicht daran, dass Sie mehrere Unterordner angelegt haben.

Möchten Sie nun Dateien aus einem dieser Unterordner und damit die Inhalte eines bestimmten Projekts auschecken (hier Projekt2, müssen Sie in der Befehlszeile den Namen des Unterordners ergänzen, also beispielweise:

svn co file:///home/<Benutzername>/mein_repository/Projekt2

Subversion-Befehle im Überblick

Wichtige Subversion-Befehle

Befehl

Bedeutung

svn blame

Gibt Auskunft darüber, wer an einer Datei gearbeitet hat.

svn cat

Gibt den Inhalt einer Datei auf der Konsole aus.

svn info

Sie erhalten Detailangaben zu Dateien und Verzeichnissen.

svn log

Gibt die Versionsgeschichte aus.

svn revert

Ihre Arbeitskopie wird auf den letztmöglichen Stand zurückgesetzt

svn help

Zeigt die Online-Hilfe von Subversion an.

Mehr Infos

Informationen rund um Subversion erhalten Sie auf der offiziellen Seite des Projekts. http://subversion.tigris.org.

Eine umfangreiche englischsprachige Referenz liefert http://svnbook.red-bean.com.

Wer seine Subversion-Installation für andere Nutzer zugänglich machen will, kann dies über LAN oder Internet tun. Dazu muss dann aber zusätzlich ein Apache-Server installiert und betrieben werden. Entsprechende Anleitungen sind im Web verfügbar.

Wer nicht gern auf der Konsole arbeitet, wird die Dienste grafischer Clients für Subversion zu schätzen wissen. Mit JSVN gibt es einen in Java entwickelten, gut gepflegten und übersichtlichen Client, der in der jeweils aktuellen Version unter http://jsvn.alternatecomputing.com erhältlich ist. Für eingefleischte Nutzer der beiden großen Desktops gibt es jeweils für die Oberfläche optimierte Programme, die Sie meist direkt über die Paketverwaltung installieren können. Der Client für Subversion unter KDE hört auf den Namen KSVN und ist unter http://kdesvn.alwins-world.de/wiki erhältlich. Folgerichtig heißt der Client für Gnome GSVN und wird über http://gsvn.sourceforge.net angeboten.