Kontakt aufnehmen

SVN: Arbeiten mit Subversion

Nach der Installation der Software müssen die zu überwachenden Dateien und Ordner ins SVN-Repository übertragen werden. Dies geschieht durch das "svn import"-Kommando, welches nur zu Beginn benötigt wird. Dazu wechselt man in das Verzeichnis, in dem sich die Dateien befinden und gibt das folgende Kommando ein:

svn import -m "Neues Testprojekt" test1 
                   "file:///D:/subversion/myrepos/projekt1/trunk/"

Wenn bei der Angabe des Ziels im Repository der Ordner nicht existiert, wird dieser automatisch vom import-Kommando angelegt. Das betrifft nicht nur einen Ordner, sondern kann auch mit einer ganzen Struktur geschehen. Bezogen auf das Beispiel wird somit im Repository das Verzeichnis "projekt1" und darin der Ordner "trunk" angelegt, in das der Inhalt des lokalen Ordners "test1" kopiert wird.

Hinweis: Im Beispiel wurde das Repository über einen lokalen Pfad angesprochen. Dies ist eine mögliche Alternative, wenn auf dem SVN-Server gleichzeitig entwickelt wird oder es ein Problem mit der Server-URL gibt.

Nach dem erfolgreichen Importieren wird in der Console die folgende Meldung ausgegeben:

Rückmeldung nach erfolgreichem Import
Darstellung: Rückmeldung nach erfolgreichem Import

Weiterhin kann man sich nach dem Import-Vorgang die übertragene Verzeichnisstruktur im Browser anzeigen lassen.

Das Import-Kommando muss auch dann verwendet werden, wenn dem Repository weitere Dateien, die bisher noch nicht von SVN überwacht wurden, hinzugefügt werden sollen.

'Auschecken' der Dateien zu Entwicklungsbeginn

Dies wird ebenfalls über ein eigenes SVN-Kommando realisiert. Dazu gibt man in der Konsole folgenden Befehl ein:

svn co "http://localhost:8080/svn/myrepos/projekt1/trunk" test1

Bei der Angabe der URL muss unbedingt der gesamte Pfad bis zum Ordner oder der Datei, die weiterentwickelt werden soll, angegeben werden. Das "test1" ist der Name für den lokalen Ordner, in dem die Struktur aus dem Repository kopiert wird. Wenn kein eigener Name für den lokalen Ordner angegeben wird, wird der Verzeichnisname aus dem Repository automatisch übernommen. Eine Alternative für "co" ist das Schlüsselwort "checkout", was aber keine praktischen Vorteile bietet. Weiterhin wird beim Auschecken - analog zum Bild oben - die Revisionsnummer mit angezeigt, die übertragen wurde.

Hinweis: Im lokalen Verzeichnis befindet sich ein versteckter Ordner ".svn", der beim Auschecken automatisch mit angelegt wird. In diesem Verzeichnis liegt eine Kopie des Revisionsstandes, welcher ausgecheckt wurde. Normalerweise ist ein Zugriff auf dieses Verzeichnis möglich, jedoch sollte man im eigenen Interesse die darin enthaltenen Dateien nicht bearbeiten.

svn update

Um Konflikte mit der Revision zu vermeiden sollte man vor Beginn oder der Weiterführung der Entwicklung das Kommando "svn update" (kurz: svn up) ausführen. Man muss davon ausgehen, dass während der Entwicklung die Revision im Repository von einem Kollegen verändert wurde. Das führt z.B. dazu, dass das Repository die Revision 10 und die eigene Working Copy noch die Revision 9 hat. Das würde beim späteren Einchecken der eigenen Dateien zu einem Konflikt führen. Aus diesem Grund sollte man das Update-Kommando zuerst ausführen, um die Revision des Repositories mit der der Working Copy zu synchronisieren. Das Update-Kommando wird ohne weitere Parameter ausgeführt.

Arbeiten mit der Working Copy

Innerhalb der Working Copy kann mit den jeweiligen Möglichkeiten eines Betriebssystems wie in einem ganz normalen Verzeichnis gearbeitet werden. Die Dateien, die geändert werden, werden im passenden Editor aufgerufen, bearbeitet und ganz normal wieder gespeichert.
Wenn man in der Working Copy eine neue Datei oder einen neuen Ordner anlegt, muss man einen Grundsatz beachten. Es reicht nicht aus, die Verzeichnisstruktur lokal zu ändern, in dem man mit "mkdir" einen neuen Ordner oder mit "touch" eine neue Datei anlegt. Solche Änderungen müssen danach auch dem SVN bekannt gemacht werden, damit später das Repository entsprechend erweitert werden kann. Mit den folgenden Kommandos kann dies umgesetzt werden:

Hinzufügen einer neuen Datei:
svn add [Dateiname]

Hinzufügen eines neuen Verzeichnisses:
svn add [Verzeichnis]

Hinzufügen einer Datei im neuen Verzeichnis:
svn add [Verzeichnis]/[Dateiname]

Konkret wird mit dem Add-Kommando der Verzeichnisbaum in der Working Copy erweitert und gleichzeitig diese Änderung für das spätere Einchecken vorgemerkt.
Weiterhin ist es auch möglich ein Verzeichnis oder eine Datei aus SVN bzw. der Working Copy zu löschen. Dies geschieht nach dem obigen Prinzip mit dem Kommando "svn delete", welches die möglichen Alternativen "rm", "remove" oder "del" für "delete" mit anbietet. Beim Delete-Kommando ist die Angabe eines Kommentars mit dem Parameter "-m" zwingend erforderlich. Es arbeitet nach dem gleichen Prinzip wie das Add-Kommando - Löschen in der Working Copy und Vormerken zum Löschen aus dem Repository beim späteren Einchecken. Allerdings ist es unter der zwingenden Angabe eines Kommentars möglich, die Datei / das Verzeichnis direkt aus dem Repository zu löschen. Dazu muss anstatt des lokalen Pfades die entsprechende Datei im Repository mit den bekannten Möglichkeiten angesprochen werden. Die folgende Zeile zeigt ein Beispiel für ein delete-Kommando:

Löschen der Datei aus der Working Copy:
svn delete [dateiname]

Datei wird aus Repository bei Commit gelöscht:
svn ci -m "message"

Hinweis: Beim add- und delete-Kommando ist es möglich, dass mehrere Dateien und Verzeichnisse angegeben werden. Man muss sich nicht zwangsläufig an dem Ort befinden, an dem die Datei hinzugefügt oder gelöscht werden soll. Durch die durch einen " " getrennten relativen Pfade können mehrere Dateien hinzugefügt bzw. gelöscht werden.

Aktualisierung des Repositories ('Einchecken')

Wenn die Entwicklung an einem gewissen Punkt (teilweiser oder kompletter Abschluss) beendet ist, müssen die Änderungen noch im Repository bekannt gemacht werden. Dieser Vorgang wird als "Einchecken" (= commit; kurz: ci) bezeichnet, was nichts anderes als das Gegenteil des oben beschriebenen "Auscheckens" ist. Beim Einchecken werden die geänderten Dateien aus der Working Copy ins Repository übertragen. Dieser Vorgang wird durch folgendes Kommando realisiert:

svn commit -m "Änderungen am 27.02.08 durchgeführt"

Danach werden die geänderten Dateien ins Repository kopiert. Wichtig dabei ist der Parameter "-m", mit dem ein Kurzkommentar zu dem Vorgang mitgeliefert wird. SVN erkennt dabei automatisch, welche Dateien davon "betroffen" sind. Sie werden bei der Rückmeldung des Kommandos mit "Sende ... [Dateinamen]" angezeigt. Nach einem erfolgreichen Ende des Vorganges wird die neue Revisionsnummer mit zurückgeliefert.

Status-Buchstaben beim Commit oder Update

Wenn man sich die aktuelle Revision aus dem Repository holt oder die Änderungen der Working Copy einchecken möchte, wird zusammen mit den betreffenden Dateien immer ein Buchstabe angezeigt, der den aktuellen Status der Datei oder des Verzeichnisses beschreibt. Diese Buchstaben können auch für die Fehlersuche von entscheidender Wichtigkeit sein. In der folgenden Tabelle werden alle Statusbuchstaben sowie deren Bedeutung näher beschrieben:

Buchstabe Bedeutung
A Datei / Verzeichnis wird hinzugefügt
C Konflikt bei Datei / Verzeichnis zwischen Repository und Working Copy
D Datei / Verzeichnis wird gelöscht
M Datei / Verzeichnis wird geändert

Änderungen rückgängig machen

In der Welt der Entwickler soll es schon passiert sein, dass man die Änderungen, die in mühevoller Arbeit durchgeführt wurden, wieder aus irgendeinem Grund wieder verwerfen muss. Natürlich kommt es hier noch dazu, dass man den ursprünglichen Stand der Datei weder kennt noch irgendwo gesichert hat. An diesem Punkt bietet Subversion erneut ein Kommando, wie man dieses Problem lösen kann. Mit Hilfe des revert-Kommandos werden in der Working Copy die aktuellen Änderungen wieder rückgängig gemacht und die letzte bekannte Revision der Datei zur Verfügung gestellt. Die folgende Zeile zeigt ein praktisches Beispiel, wie dieses Kommando eingesetzt werden kann:

Hinzufügen von Dateien:
svn add datei1 datei2

Jetzt stellt man fest, dass man sie doch nicht mehr braucht.

Hinzufügen rückgängig machen:
svn revert datei1 datei2

An diesem Beispiel sieht man, dass das revert-Kommando nicht nur bei Änderungen an Dateien greift, sondern auch bei administrativen Vorgängen wie dem Hinzufügen oder Löschen von Dateien.

Hinweis: Bei dem revert-Kommando sollte man wissen, dass sich das Ausführen des Kommandos nicht wieder rückgängig machen lassen kann. Das bedeutet, dass es bei der Version der Datei oder des Verzeichnisses nach dem revert bleibt.

Beispiele für administrative Kommandos

Wenn die Entwicklungszeit an einem Projekt länger dauert, was keine Seltenheit ist, weiß man oft nicht mehr aus welchem Repository-Zweig man seine Working Copy ausgecheckt hat. Subversion liefert ein Kommando mit, mit dem man sich alle administrativen Informationen einer Working Copy anzeigen lassen kann. Dieses Feature ist auch dann hilfreich, wenn sich z. B. mehrere Working Copies auf einem Rechner befinden. Das Kommando "svn info" funktioniert nur innerhalb der Working Copy und liefert folgende Informationen, wie im folgenden Bild gezeigt wird:

Ausgabe des svn info-Kommandos
Darstellung: Ausgabe des svn info-Kommandos

Die wichtigsten Informationen dieser Ausgabe stehen in der URL-Zeile. Bei der bekannten trunk, trags, branches-Struktur ist genau ersichtlich, um welchen Pfad es sich handelt. Weiterhin kann man auch hier den aktuellen Revisionsstand und das Datum der letzten Änderungen im Repository erkennen.

Ein weiteres interessantes Kommando ist das ls-Kommando, mit dem man sich den Inhalt eines Repositories anzeigen lassen kann. Dabei ist bei der Angabe der URL oder des Verzeichnisses ls-Befehl zu beachten, dass nur der Inhalt des jeweiligen Pfades angezeigt wird. Für tiefergehende Angaben muss das Kommando erneut ausgeführt und das entsprechende Ziel dazu angegeben werden. Das folgende Beispiel für das ls-Kommando im Beispiel-Repository an:

svn ls http://192.168.2.100:8080/svn/myrepos/projekt1/trunk

Dieses Kommando gibt die folgenden Informationen zurück:

.htusers
test1/
test2/
test3/

Möchte man jetzt den Inhalt des Ordners test1 sehen, muss das ls-Kommando wie folgt erweitert werden:

svn ls http://192.168.2.100:8080/svn/myrepos/projekt1/trunk/test1

Auswahl weiterer SVN-Kommandos

Die folgende Tabelle zeigt eine Auswahl weiterer Kommandos, die Subversion automatisch mitliefert und die im Laufe der Arbeit mit SVN von Bedeutung sein können.

Kommando Bedeutung
svn diff Vergleich zwischen zwei Versionen einer Datei (= Anzeige der Änderungen)
svn merge Abgleich einer Datei in zwei Repositories
svn log Anzeige der Kurzmitteilungen z. B. beim delete- oder Commit-Kommando
svn status Anzeige des aktuellen Status des Inhaltes einer Working Copy
svn mkdir Anlegen eines Verzeichnisses direkt im Repository
svn cleanup beseitigt Sperren und beendet unterbrochene Informationen in einer Working Copy
svn lock Sperrt Teile der Working Copy oder des Repositories (*)
svn export Sicherung eines Repositories
(*) Diese Sperre gilt nicht für den Nutzer, der die Sperre gesetzt hat. Er kann die markierten Teile weiter bearbeiten. Diese Sperre gilt für alle anderen Nutzer.

Typische Fehlermeldung in Subversion

Es passiert oft, dass die folgende Fehlermeldung anzeigt wird, egal ob es sich um einen grafischen oder textbasierten Zugriff handelt:

svn: PROPFIND Anfrage fehlgeschlagen auf 
                               "/svn/repos/projekt1/trunk/test1"
svn: PROPFIND von "/svn/repos/projekt1/trunk/test1": 
                   405 Method Not Allowed (http://localhost:8080)

Im Normalfall ist die Ursache ein Fehler bei der Angabe der Ziel-URL, egal auf welche Weise man sie angibt.

Tip

Es wird empfohlen den Pfad der URL immer mit einem "/" abzuschließen. Damit wird sichergestellt, dass die URL auch immer korrekt interpretiert wird. Dann spielt es keine Rolle mehr, welche SVN-Server-Software verwendet wird.

Du arbeitest in einer Agentur oder als Freelancer?
Dann wirf doch mal einen Blick auf unsere Software FeatValue.

Über uns

Stefan Wienströer

Wir entwickeln Webanwendungen mit viel Leidenschaft. Unser Wissen geben wir dabei gerne weiter. Mehr über a coding project

Cookie-Einstellungen

Helfen Sie dabei, uns noch besser zu machen. Wir nutzen Cookies und ähnliche Technologien, um die Website auf Ihre Bedürfnisse anzupassen. Zur Datenschutzerklärung

Auswahl speichern