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/"
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:
Darstellung: Rückmeldung nach erfolgreichem Import
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]
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"
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
Hinzufügen rückgängig machen:
svn revert datei1 datei2
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:
Darstellung: Ausgabe des svn info-Kommandos
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/
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 |
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)
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
Wir entwickeln Webanwendungen mit viel Leidenschaft. Unser Wissen geben wir dabei gerne weiter. Mehr über a coding project