Subversion und .svn Verzeichnisse finden und löschen

Subversion, häufig abgekürzt SVN gennant, ist eine Quellcode-Versionierungssoftware und hat vor ein paar Jahren das bis dahin etablierte CVS (Concurrent Version System) an vielen Stellen abgelöst. Auch wenn GIT nun an vielen Stellen SVN ablöst, ist die Software noch in vielen Betrieben erfolgreich im Einsatz. Nicht zuletzt, weil es eine weite Unterstützung in Form von Plugins in IDEs, GUIs und Tools gibt.
Ein mit SVN versioniertes Software-Projekt erkennt man häufig an der Verzeichnisstruktur. Solange der Quellcode noch versioniert wird, befinden sich .svn Verzeichnisse in allen Projekt-Ordnern und das Repository, das die zentrale „Ablage-Stelle“ auf einem Server darstellt, ist in der Regel nach einem bestimmten Muster aufgebaut.

Viele folgen der Empfehlung das zentrale SVN-Repository/Archiv mit Unterverzeichnisse zu strukturieren, die den jeweiligen Software-Status widerspiegeln. „trunk“ für die aktuelle Entwicklung, „stable“ für den stabilen Stand, „branches“ und „tags“ für unabhängige Entwicklungslinien mit der gleichen Historie. Die letztgenannten fließen häufig in den Hauptzweig zurück.

 

Für jede Datei in einem Projekt merkt sich Subversion zwei essentielle Informationen in einem eigenen Verwaltungsbereich. Dieser Bereich sind die .svn-Verzeichnisse die in jedem Projekt-Order zu finden sind. Dort merkt sich SVN auf welcher Revision die Arbeitsdateien aufbauen und den Zeitstempel der letzten Aktualisierung.

 

Die .svn-Verzeichnisse werden nur während der Entwicklung benötigt und sind auf produktiven System eher unerwünscht. Subversion ermöglicht durch den Unterbefehl „export“ eine unversionierte Version eines Projekts zu erstellen. Die exportierte Version ist frei von den subversion-spezifischen Dateien und Verwaltungsbereichen. Dennoch kommt es hin und wieder vor, dass man in einer lokalen Kopie (auf dem eigenen Rechner oder auf dem Server) die .svn löschen möchte, weil zum Beispiel gerade in diesem Augenblick nicht die Möglichkeit besteht einen Export zu generieren.

 

Die folgende Bash-Scriptzeile kann benutzt werden, um alle .svn-Vezeichnisse und Dateien die mit „._“ beginnen zu finden und zu löschen.

[bash]
find . -name ".svn" -prune -o -name "._*" -exec rm -rf {} ;
[/bash]

Windows-Benutzer können die Script-Zeile in einer Cygwin-Shell verwenden.

 

Typische SVN-Kommandos die täglich eingesetzt werden:

[bash]
#———————————————————————-
# Eine lokale Kopie eines Projektes aus dem zentralen Archiv erstellen
#———————————————————————-
svn checkout svn://example.com/svn/trunk # über das svn-Protokoll
svn checkout https://example.com/svn/trunk # über HTTP

#———————————————————————-
# Basis-Befehle
#———————————————————————-
svn up # Kurzform für "svn update"; Aktualisiert die lokale
# Version auf den Stand des zentralen Repository
svn add [Datei] # Fügt eine Datei zu dem Projekt hinzu
svn ci -m "Nachricht" # Kurzform für ’svn commit -m "Nachricht"‘;
# Überträgt die eigenen Änderungen in das
# zentrale Repository
svn log # Zeigt die Historie eines Projektes

#———————————————————————-
# Arbeiten mit Verzeichnissen und Dateien
#———————————————————————-
svn copy Datei-A Datei-B # Erstellt eine Kopie von "Datei-A" unter
# dem Namen "Datei-B" und nimmt diese
# in die Versionierung auf
svn mkdir MeinNeuesVerzeichnis # Erstellt ein Verzeichnis mit dem Namen
# "MeinNeuesVerzeichnis" und nimmt es in
# die Versionierung auf
svn mv Datei-A Datei-B # Benennt eine Datei mit dem Namen
# "Datei-A" nach "Datei-B" um. Die Historie
# bleibt dabei erhalten
svn rm Datei-A # Löscht "Datei-A" und nimmt diese aus der
# Versionierung raus

#———————————————————————-
# Verschiedenes/Nützliches
#———————————————————————-
svn status # Zeigt den Status (Veränderugen) der lokalen Version an.
svn diff # Zeigt den Unterschiede im Unix-Diff-Format an.
# Die Ausgabe kann in eine Datei umgeleitet
# werden, um einen Patch zu erstellen
svn revert # Verwirft die eigenen und noch nicht übergebenen Änderungen.
# Dabei wird die lokale Version auf die letztbekannte
# Version gebracht
svn info # Zeigt allgemeine Informationen zu einem Projekt
[/bash]

Subversion bringt weit mehr Befehle mit, um die volle Kontrolle über die Versionierung zu behalten, aber dies würde den Rahmen dieses Artikels sprengen. Weiterhin kapseln Werkzeuge wie Tortoise-SVN diese Befehle und Funktionen in einer GUI, um die Arbeit zu vereinfachen. Dennoch ist es sinnvoll mit den direkten Befehlen umgehen zu können, falls eine GUI nicht zur Verfügung steht.
Interessierte, die mehr über Subversion und dessen Möglichkeiten erfahren wollen, finden in folgenden Büchern alles Wissenswerte über dieses Tool.

 

Dieses Buch ist auch in einer freien digitalen Version unter folgender Adresse erhältlich: http://svnbook.red-bean.com/