Manchmal ist es nützlich eine Arbeitskopie zu haben, die aus mehreren Projekten besteht. Zum Beispiel kann es vorkommen, dass Sie Unterordner haben wollen, die von verschiedenen anderen Stellen des Projektarchivs kommen oder vielleicht sogar aus verschiedenen Projektarchiven. Wenn Sie wollen, dass jeder Benutzer die gleiche Struktur der Arbeitskopie hat, können Sie mit Hilfe der svn:externals Eigenschaft die gewünschten Ressourcen an den benötigten Stellen in der Arbeitskopie einbinden.
Nehmen wir an Sie erstellen eine Arbeitskopie von /projekt1 in D:\dev\projekt1. Selektieren Sie den Ordner D:\dev\projekt1, machen Sie einen Rechtsklick und wählen Sie → aus dem Kontextmenü. Der Eigenschaften-Dialog erscheint, auf dessen Subversion Tab Sie Eigenschaften anschauen, verändern oder setzen können. Klicken Sie auf und wählen Sie die svn:externals Eigenschaft aus der Liste und schreiben Sie die zu referenzierende Projektarchiv URL in dem Format Name URL oder, wenn Sie eine bestimmte Revision angeben wollen, Name -rREV URL in das Textfeld. Sie können mehrere externe Projekte - eines pro Zeile - hinzufügen. Nehmen wir an, Sie haben folgende Eigenschaften auf D:\dev\projekt1 gesetzt:
http://sounds.red-bean.com/repos sounds http://graphics.red-bean.com/repos/fast%20graphics quick_graphs -r21 http://svn.red-bean.com/repos/skin-maker skins/toolkit
Klicken Sie auf und übertragen Sie Ihre Änderungen. Sobald jetzt jemand seine Arbeitskopie aktualisiert, wird Subversion einen Unterordner D:\dev\projekt1\sounds anlegen und in diesen das „Sounds“ Projekt auschecken, einen weiteren Unterordner D:\dev\projekt1\quick_graphs mit dem „Graphics“ Projekt, und schließlich einen verschachtelten Unterordner D:\dev\project1\skins\toolkit, der Revision 21 des „Skinmaker“ Projekts enthält.
Sonderzeichen in URLs müssen korrekt ersetzt werden Leerzeichen z.B. durch %20, wie im obigen Beispiel, damit die externen Verweise funktionieren.
Wenn der lokale Pfad Leerzeichen oder andere Sonderzeichen enthalten soll, können Sie ihn in doppelte Anführungszeichen setzen oder, im Unix Stil, einen \ (umgekehrter Schrägstrich) jedem Sonderzeichen voranstellen. Dies bedeutet auch, dass Sie den normalen Schrägstrich / als Pfadtrennzeichen verwenden müssen. Beachten Sie, dass dieses Verhalten mit Subversion 1.6 eingeführt wurde und mit älteren Clients nicht funktioniert.
Sie sollten in Erwägung ziehen, in allen „externals“ Definitionen explizite Revisionsnummern anzugeben. Diese Vorgehensweise ermöglicht es Ihnen, exakt zu bestimmen zu welchem Zeitpunkt welcher Stand der externen Informationen herangezogen wird. Neben dem sofort zu erkennenden Aspekt, dass Sie nicht mehr von Änderungen in externen Bibliotheken, über die Sie keine Kontrolle haben, überrascht werden können, bietet die Verwendung expliziter Revisionsnummern den Vorteil, dass, wenn Sie Ihre Arbeitskopie zurückdatieren, auch die externen Verweise entsprechend zurückdatiert werden. Andernfalls enthalten die externen Verweise die HEAD Revision. Für ein Softwareprojekt kann das den Unterschied zwischen einem erfolgreichen und einem fehlgeschlagenen Erzeugen eines älteren Projektstandes ausmachen.
Das hier angezeigte Format wurde in Subversion 1.5 eingeführt. Sie können auch auf das ältere Format stoßen, das dieselbe Information in einer anderen Reihenfolge enthält. Das neue Format wird bevorzugt, da es einige nützliche Möglichkeiten bietet, die unten bescrhieben werden. Allerdings funktioniert das neue Format nicht mit älteren Subversion Clients. Die Unterschiede werden im Subversion Buch beschrieben.
Wenn das externe Projekt im selben Projektarchiv ist, werden alle Änderungen in diesem externen Projekt im Übertragen-Dialog aufgelistet und gemeinsam mit dem Hauptprojekt übertragen.
Wenn ein externes Projekt in einem anderen Projektarchiv ist, werden Sie zwar über Änderungen im externen Projekt informiert, Sie müssen diese jedoch separat übertragen.
Wenn Sie absolute URLs in Ihren svn:externals Verweisen verwenden und Sie Ihre Arbeitskopie umplatzieren, (weil sich z.B. die URL des Projektarchivs ändert), ändern sich die Verweise und funktionieren unter Umständen nicht mehr.
Um solche Probleme zu vermeiden, unterstützen Subversion Clients ab Version 1.5 relative externe URLs. Es stehen vier verschiedene Methoden zur Verfügung, um externe URLs festzulegen. In den folgenden Beispielen nehmen wir zwei Projektarchive an: Eines in http://example.com/svn/repos-1 und ein weiteres in http://example.com/svn/repos-2. Wir haben http://example.com/svn/repos-1/projekt/trunk in C:\Projekt ausgecheckt und die svn:externals Eigenschaft ist auf trunk gesetzt.
Diese URLs beginnen stets mit der Zeichenkette ../ zum Beispiel:
../../grafik/foo gemeinsam/foo-grafik
Dadurch wird http://example.com/svn/repos-1/grafik/foo in C:\Projekt\gemeinsam\foo-grafik extrahiert.
Beachten Sie, dass die URL relativ zu der URL des Verzeichnisses mit der svn:externals Eigenschaft ist und nicht zu dem Verzeichnis in dem der externe Verweis auf die Festplatte gespeichert wird.
Diese URLs beginnen stets mit der Zeichenkette ^/ zum Beispiel:
^/grafik/foo gemeinsam/foo-grafik
Dadurch wird http://example.com/svn/repos-1/grafik/foo in C:\Projekt\gemeinsam\foo-grafik extrahiert.
Sie können einfach auf andere Projekte innerhalb desselben SVNParentPath (Ein gemeinsames Elternverzeichnis, das mehrere Projektarchive enthält) verweisen. Zum Beispiel:
^/../repos-2/werkzeug/hammer gemeinsam/hammer-werkzeug
Dadurch wird http://example.com/svn/repos-2/werkzeug/hammer in C:\Projekt\gemeinsam\hammer-werkzeug extrahiert.
URLs die mit der Zeichenkette // beginnen, kopieren nur den Schemateil der URL. Das ist dann nützlich, wenn auf denselben Rechnernamen, abhängig vom Netzwerk mit einem anderen Schema zugegriffen werden muss. So können zum Beispiel Clients im Intranet per http:// zugreifen, während externe Clients svn+ssh:// verwenden müssen. Zum Beispiel:
//example.com/svn/repos-1/grafik/foo gemeinsam/foo-grafik
Dadurch wird in Abhängigkeit vom Schema, das verwendet wurde, um C:\Projekt auszuchecken, http://example.com/svn/repos-1/grafik/foo oder svn+ssh://example.com/svn/repos-1/grafik/foo extrahiert.
URLs die mit der Zeichenkette / anfangen, kopieren das Schema und den Rechnernamen der URL, zum Beispiel:
/svn/repos-1/grafik/foo gemeinsam/foo-grafik
Dadurch wird http://example.com/svn/repos-1/grafik/foo in C:\Projekt\gemeinsam\foo-grafik extrahiert. Wenn Sie jedoch Ihre Arbeitskopie von einem anderen Server in svn+ssh://spiegel.server.net/svn/repos-1/projekt1/trunk auschecken, wird der externe Verweis von svn+ssh://spiegel.server.net/svn/repos-1/grafik/foo geholt.
Sie können auch, falls erforderlich, eine Ankerrevision nach der URL angeben, z.B. http://sounds.red-bean.com/repos@19.
Wenn sie mehr Informationen brauchen, wie TortoiseSVN Eigenschaften behandelt, lesen Sie „Projekt-Einstellungen“.
Um sich über verschiedene Methoden zum Zugriff auf gemeinsame Unterprojekte zu informieren, lesen Sie „Ein gemeinsames Unterprojekt einbinden“.
Beginnend mit Subversion 1.6 können Sie einzelne externe Dateien unter Verwendung der gleichen Syntax wie für Ordner an Ihre Arbeitskopie binden. Es gibt jedoch ein paar Einschränkungen.
Beim Verweis auf eine externe Datei muss dafür Sorge getragen werden, dass diese in einem bereits existierenden, versionierten Ordner zu liegen kommt. Im allgemeinen ist es am sinnvollsten, die Datei direkt in dem Ordner abzulegen der den svn:externals Verweis enthält, es kann aber auch ein versionierter Unterordner sein. Im Gegensatz dazu wird bei Verweisen auf externe Verzeichnisse, falls erforderlich, die Hierarchie aus nicht versionierten Ordnern automatisch aufgebaut.
Die URL für die externe Datei muss sich in dem selben Projektarchiv befinden, wie die URL in die die externe Datei eingebettet wird. Verweise auf externe Dateien zwischen Projektarchiven werden nicht unterstützt.
Eine externe Datei verhält sich in den meisten Fällen wie jede andere versionierte Datei, sie kann aber nicht mit den normalen Befehlen gelöscht oder verschoben werden. Stattdessen muss die svn:externals Eigenschaft verändert werden.
In Subversion 1.6 ist es nicht möglich, eine externe Datei aus Ihrer Arbeitskopie zu entfernen, nachdem Sie sie hinzugefügt haben, selbst wenn Sie die svn:externals Eigenschaft vollständig löschen. Sie müssen eine neue Arbeitskopie auschecken, um die Datei loszuwerden.