Ordentliche Buchführung
Mit CVS oder Subversion Quelltexte verwalten
Arbeiten mit SVN
Nach dem Erstellen ist das Repository zunächst leer. Um es mit bereits vorhandenen Dateien zu füllen, benutzen Sie den Befehl svn import. Nennen Sie – wie beim normalen Kopieren von Dateien – Quelle und Ziel des Imports: svn import /home/jploetner/projekte file:///Pfad
/zum
/Repository
-m "initialer Import" übergibt alle Dateien aus dem Verzeichnis Projekte an die Versionsverwaltung. Den Text hinter dem Parameter -m trägt SVN als Kommentar für die Grundversion (Revision 1) der Projektdateien ein.
Von jetzt an Arbeiten Sie nicht mehr mit den Dateien in /home/jploetner/projekte, Sie können das Verzeichnis löschen. Erstellen Sie einen neuen Ordner für die Arbeitskopien (den Checkout) der Projektdateien und wechseln Sie auf der Konsole in das neue Verzeichnis. Auf den Befehl svn checkout file:///Pfad
/zum
/Repository
/ antwortet SVN mit der Meldung Checked out revision 0 und schreibt alle Projektdateien sowie einige Verwaltungsinformationen in einem versteckten Ordner in das aktuelle Verzeichnis. Dies sind die Arbeitskopien aller Dateien aus dem Repository, die Sie wie gewohnt bearbeiten.
Jede Veränderung melden Sie der Versionsverwaltung mit svn commit -m "Kommentar
" Pfad
/zur
/Datei
. Nutzen Sie dabei die Möglichkeit, jeder Revision ausführliche Kommentare hinzuzufügen, die die Änderungen dokumentieren. Kommentare sind besonders bei Teamprojekten wichtig, doch auch wenn Sie allein arbeiten, erleichtern sie es, den Überblick über die sich mehrenden Versionen zu behalten.
Möchten Sie dem Projekt eine neue Datei hinzufügen, so erstellen Sie diese zunächst im Arbeitskopien-Ordner. svn add Dateiname
teilt der Versionsverwaltung mit, dass Sie diese Datei in Zukunft verwalten soll, schreibt deren Inhalt jedoch noch nicht in die Datenbank. Erst der Befehl svn commit -m "Kommentar
" Dateiname
übergibt die erste Version an das Repository. svn delete Dateiname
löscht eine Datei aus dem Repository, allerdings nicht aus dem Arbeitskopien-Ordner. Erst nach einem Commit verschwindet auch die Arbeitskopie. Beispiele für beide Befehle zeigt Listing 2.
Listing 2
$ svn add artikel2.txt A artikel2.txt $ svn commit -m "Init-Version" artikel2.txt Adding artikel2.txt Transmitting file data . Committed revision 1. $ svn delete artikel2.txt D artikel2.txt
Mit svn move alterName neuerName
benennen Sie Dateien um. SVN löscht die alte Datei und erstellt Sie mit neuem Namen (Listing 3). Anders als bei CVS gehen dabei die Versionsinformationen nicht verloren.
Listing 3
$ svn move neu.txt alt.txt A alt.txt D neu.txt $ svn commit -m "Umbennenen von neu.txt in alt.txt" Adding alt.txt Deleting neu.txt Transmitting file data . Committed revision 3.
Nur ein Projekt pro Repository? Das muss nicht so sein. Übergeben Sie SVN, wenn es mehrere Projekte verwalten soll, einfach den projekte-Grundordner, in dem zum Beispiel die Unterordner artikel_user, webprojekt und fotoprojekt liegen. Sie können dann einzelne Projekte auschecken, indem Sie den an den Pfad
/zum
/Repository
noch den Unterordner des jeweiligen Projekts anhängen: svn checkout Pfad
/zum
/Repository
/webprojekt extrahiert nur den Unterordner webprojekt.
SVN ist für die Teamarbeit ausgelegt. Wenn Sie Änderungen, die Ihre Mitstreiter vorgenommen haben, ansehen möchten, holen Sie diese über den Befehl update aus der Datenbank. Bevor Sie dies tun, vergessen Sie nicht, eigene Änderungen mit commit in die Versionshistory zu schreiben. svn update bringt daraufhin das Arbeitsverzeichnis auf den neuesten Stand. Es lädt aber nicht alle, sondern nur die veränderten Dateien herunter. Besonders wenn das Repository auf einem anderen Rechner im Netz steht, ist dies wesentlich effektiver. Möchten Sie nur bestimmte Dateien aktualisieren, so können Sie deren Namen hinter update als Parameter angeben.
Was macht den Unterschied?
Es ist nicht ganz leicht, den Überblick über die Veränderung der Dateien zu behalten. Der Befehl diff zeigt die Unterschiede zwischen der lokalen Arbeitskopie und der Version im Repository. Dies veranschaulicht folgende Beispieldatei neu.txt mit dem Inhalt:
In dieser Datei stehen drei Zeilen
Verändern Sie nun den Inhalt der Arbeitskopie der Datei in
In dieser Datei stehen vier Zeilen
dann liefert svn diff neu.txt eine Ausgabe, wie sie Listing 4 zeigt. SVN nennt zuerst den Dateinamen, dann die beiden Versionen, die es vergleicht (revision 2 im Repository gegen die working copy). Diff teilt die Datei in Blöcke ein, die es durch Zeilen, die mit @@ enden und beginnen, markiert.
-<§§I>von,bis<§§I> zeigt die Zeilennummern des Blocks in revision 2, +<§§I>von,bis<§§I> die Zeilennummern in der working copy. Der Block wurde nicht verschoben, die Zeilennummern sind daher gleich geblieben. Dass sich der Text drei zu vier verändert hat, symbolisiert SVN durch + und - vor der entsprechenden Zeile.
Listing 4
$ svn diff neu.txt Index: neu.txt =================================================================== — neu.txt (revision 2) +++ neu.txt (working copy) @@ -1,3 +1,3 @@ In dieser Datei stehen -drei +vier Zeilen.
Wem diese sogenannte Unified-Diff-Notation zu kompliziert ist, der sollte ein grafisches SVN-Backend benutzen. Abbildung 3 zeigt das gleiche Beispiel in Kdesvn [3]. Der entsprechende Konsolenbefehl lautet svn status Pfad
/zum
/Arbeitsverzeichnis
. Informationen zur Bedeutung der Buchstabensymbole, mit denen SVN die Änderungen dabei kennzeichnet, finden Sie unter [4].
Eine Alternative zu Kdesvn bieten das Konqueror-Plugin KSvn [5], die Qt-basierten Programme eSvn [6] und QSvn[7] sowie das Java-Programm Jsvn [8]. Auch die Entwicklungsumgebungen Kdevelop und Eclipse (Plugins: Subversive [9] oder Subclipse [10]) integrieren eine graphische SVN-Unterstützung.
Selbstverständlich ist auch ein Vergleich mit älteren Version möglich: svn diff -r Version
vergleicht die Arbeitskopie mit der angegebenen Version, svn diff -r Version1
:Version2
vergleicht zwei Versionen im Repository.
Anders als bei CVS gelten die Versionsnummern in SVN global: Jeder Commit erhöht die Versionsnummer aller Dateien im Repository. Daher ist es bei SVN nicht möglich, frühere Versionen einzelner Dateien abzurufen: Nur Gesamtzustände des Repositorys vor einem bestimmten Commit lassen sich wiederherstellen (svn update -r Revision
). Einzelne Dateien können Sie aber über den Befehl svn cat -r Revision
Dateiname
anzeigen und über die Umleitung der Befehlsausgabe (svn cat -r Revisionsnummer
Dateiname
> Dateiname
) im Arbeitsverzeichnis speichern. Die Versionsverwaltung zählt diese Datei nach einem erneuten Commit allerdings schlicht als neue Version.



