Diese Dokumentation wurde zur Beschreibung der Serie 1.6.x von Subversion erstellt. Falls Sie eine unterschiedliche Version von Subversion einsetzen, sei Ihnen dringend angeraten, bei http://www.svnbook.com/ vorbeizuschauen und stattdessen die zu Ihrer Version von Subversion passende Version dieser Dokumentation heranzzuiehen.

Wie Sie Daten in Ihr Projektarchiv bekommen

Sie können neue Dateien auf zweierlei Weisen in das Subversion-Projektarchiv bekommen: svn import und svn add. Wir werden svn import jetzt und svn add später in diesem Kapitel besprechen, wenn wir einen typischen Tag mit Subversion durchnehmen.

Importieren von Dateien und Verzeichnissen

Mit dem svn import-Befehl kann ein unversionierter Verzeichnisbaum schnell in ein Projektarchiv kopiert werden, wobei benötigte Zwischenverzeichnisse nach Bedarf angelegt werden. svn import erfordert keine Arbeitskopie und pflegt Ihre Dateien sofort in das Projektarchiv ein. Typischerweise verwenden Sie diesen Befehl, wenn bereits ein Verzeichnisbaum besteht, den Sie aber in einem Subversion-Projektarchiv pflegen möchten. Zum Beispiel:

$ svn import mytree file:///var/svn/newrepos/some/project \
             http://svn.example.com/svn/repo/some/project \
             -m "Erstimport"
Hinzufügen     mytree/foo.c
Hinzufügen     mytree/bar.c
Hinzufügen     mytree/subdir
Hinzufügen     mytree/subdir/quux.h

Revision 1 übertragen.

Im vorstehenden Beispiel wurde der Inhalt des Verzeichnisses mytree in das Verzeichnis some/project des Projektarchivs abgelegt. Beachten Sie, dass Sie dieses neue Verzeichnis nicht erst anlegen mussten – svn import erledigt das für Sie. Unmittelbar nach der Übergabe können Sie Ihre Daten im Projektarchiv sehen:

$ svn list http://svn.example.com/svn/repo/some/project
bar.c
foo.c
subdir/
$

Beachten Sie, dass nach dem Import das ursprüngliche Verzeichnis nicht in eine Arbeitskopie umgewandelt wird. Um auf diesen Daten auf eine versionierte Art und Weise arbeiten zu können, müssen Sie noch eine Arbeitskopie aus diesem Baum erzeugen.

Empfohlene Aufteilung des Projektarchivs

Subversion bietet äußerste Flexibilität, was die Anordnung Ihrer Daten betrifft. Da es einfach Verzeichnisse und Dateien versioniert und keinem dieser Objekte eine bestimmte Bedeutung zuschreibt, können Sie die Daten in Ihrem Projektarchiv auf beliebige Weise anordnen. Leider bedeutet diese Flexibilität auch, dass Sie sich ohne Karte leicht verirren können, wenn Sie versuchen, sich in verschiedenen Subversion-Projektarchiven zurechtzufinden, die eine komplett unterschiedliche und unvorhersehbare Anordnung der in ihnen vorhandenen Daten haben.

Um dieser Verwirrung entgegenzuwirken, empfehlen wir Ihnen, dass Sie einer Konvention zur Gestaltung des Projektarchivs (bereits vor langer Zeit eingeführt, während der Entstehung der Subversion-Projektes) folgen, in der eine handvoll strategisch benannter Verzeichnisse des Subversion-Projektarchivs eine nützliche Aussage über die sich darin befindlichen Daten machen. Die meisten Projekte besitzen eine erkennbare Hauptlinie oder Trunk der Entwicklung, einige Zweige (engl. branches), die abweichende Kopien von Entwicklungslinien darstellen und einige Tags, die benannte stabile Momentaufnahmen einer bestimmten Entwicklungslinie sind. Also empfehlen wir zunächst, dass jedes Projekt eine erkennbare Projektwurzel im Projektarchiv hat, ein Verzeichnis unter dem sich die gesamte versionierte Information des Projektes befindet, und zwar nur dieses Projektes. Zweitens schlagen wir vor, dass jede Projektwurzel ein Unterverzeichnis trunk für die Hauptentwicklungslinie hat, ein Unterverzeichnis branches, in dem bestimmte Zweige (oder Sammlungen von Zweigen) erstellt werden und ein Unterverzeichnis tags, in dem bestimmte Tags (oder Sammlungen von Tags) angelegt werden. Selbstverständlich kann die Wurzel des Projektarchivs auch als Projektwurzel dienen, falls das Projektarchiv nur ein einziges Projekt beheimatet.

Hier sind ein paar Beispiele:

$ svn list file:///var/svn/single-project-repo
trunk/
branches/
tags/
$ svn list file:///var/svn/multi-project-repo
project-A/
project-B/
$ svn list file:///var/svn/multi-project-repo/project-A
trunk/
branches/
tags/
$

Wir werden in Kapitel 4, Verzweigen und Zusammenführen viel mehr über Tags und Zweige reden. Details und Ratschläge zum Einrichten von Projektarchiven bei mehreren Projekten finden Sie in „Aufbau des Projektarchivs“. Schließlich erörtern wir Projektwurzeln näher in „Planung der Organisation Ihres Projektarchivs“.

Was steckt in einem Namen?

Subversion gibt sich alle Mühe, nicht die Art der Daten einzuschränken, die Sie unter Versionskontrolle setzen können. Der Inhalt von Dateien und Werte von Eigenschaften werden als binäre Daten gespeichert und übermittelt, und „Datei-Inhalts-Typ“ sagt Ihnen, wie Sie Subversion darauf hinweisen, dass Text-Operationen für eine bestimmte Datei keinen Sinn ergeben. Trotzdem gibt es einige wenige Stellen, an denen Subversion Einschränkungen für gespeicherte Informationen vorsieht.

Subversion behandelt intern bestimmte Dateneinheiten – z.B. Namen von Eigenschaften, Pfadnamen und Protokollmitteilungen – als UTF-8-kodiertes Unicode. Das heißt aber nicht, dass all Ihre Interaktionen mit Subversion in UTF-8 erfolgen müssen. Im Allgemeinen werden Subversion-Clients die Umwandlungen zwischen UTF-8 und dem auf Ihrem Computer verwendeten Kodiersystem großzügig und transparent vornehmen, sofern eine solche Umwandlung sinnvollerweise durchgeführt werden kann (was bei den meisten gebräuchlichsten Kodierungen heutzutage der Fall ist).

Darüber hinaus werden Pfadnamen sowohl bei WebDAV-Übertragungen als auch in einigen der Steuerdateien von Subversion als XML-Attributwerte verwendet. Das bedeutet, dass Pfadnamen nur aus zulässigen XML (1.0) Zeichen bestehen dürfen. Subversion verbietet ebenfalls TAB-, CR- und LF-Zeichen in Pfadnamen, um zu verhindern, das Pfade in Vergleichen oder bei Befehlsausgaben, wie svn log oder svn status zerrissen werden.

Obwohl es sich anhört, als müsse man sich eine Menge merken, sind diese Einschränkungen selten ein Problem. Solange Ihre Locale-Einstellungen kompatibel zu UTF-8 sind und Sie keine Kontrollzeichen in den Pfadnamen verwenden, sollten Sie keine Probleme habe, mit Subversion zu kommunizieren. Der Kommandozeilen-Client bietet Ihnen noch ein wenig Extrahilfe – um korrekte Versionen für den internen Gebrauch zu erzeugen, maskiert er bei Bedarf automatisch illegale Zeichen in URL-Pfaden, die Sie eingeben.