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 Eigenschaft svn:externals
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
. Markieren Sie den Ordner D:\dev\projekt1
, machen Sie einen Rechtsklick und wählen Sie → aus dem Kontextmenü. Der Windows-Eigenschaftendialog erscheint, auf dessen Subversion-Tab können Sie Eigenschaften anschauen, verändern oder setzen. Klicken Sie auf . Im TortoiseSVN-Eigenschaftendialog machen Sie entweder einen Doppelklick auf svn:externals
, wenn der Eintrag existiert oder klicken Sie auf und wählen Sie externals
aus dem Menü. Dann füllen Sie den Dialog mit den benötigten Informationen aus.
Sonderzeichen in URLs müssen korrekt ersetzt werden, damit sie funktionieren, Leerzeichen z. B. durch %20
.
Wenn der lokale Pfad Leerzeichen oder andere Sonderzeichen enthalten soll, können Sie ihn in doppelte Anführungszeichen setzen oder im Unix-Stil jedem Sonderzeichen einen \
(umgekehrter Schrägstrich) 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. Dies bedeutet, dass Sie entscheiden können, wann welcher Stand der externen Informationen herangezogen wird. Neben dem sofort zu erkennenden Aspekt, dass Sie nicht mehr von Änderungen in externen Bibliotheken überrascht werden können, über die Sie keine Kontrolle haben, bietet die Verwendung expliziter Revisionsnummern den Vorteil, dass auch die externen Verweise entsprechend zurückdatiert werden, wenn Sie Ihre Arbeitskopie zurückdatieren. 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.
Der Bearbeiten-Dialog für svn:externals
-Eigenschaften erlaubt Ihnen, die externen Verweise zu definieren und sie automatisch an die HEAD-Revision zu binden.
Wenn das externe Projekt im selben Projektarchiv befindet, werden alle Änderungen in diesem externen Projekt im Übertragen-Dialog aufgelistet und gemeinsam mit dem Hauptprojekt übertragen.
Wenn sich ein externes Projekt in einem anderen Projektarchiv befindet, 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 Eigenschaft svn:externals
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 Eigenschaft svn:externals
ist und nicht zu dem Verzeichnis, in dem der externe Verweis auf die Festplatte gespeichert wird.
You can also specify whet
Sie können einfach auf andere Projekte innerhalb desselben SVNParentPath
(ein gemeinsames Elternverzeichnis, das mehrere Projektarchive enthält) verweisen. Zum Beispiel:
^/../repos-2/hammers/claw common/claw-hammer
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 außerdem eine fixe und eine Arbeitsrevision für die URL angeben, falls erforderlich. Um mehr über fixe und Arbeitsrevisionen zu erfahren, lesen Sie bitte das entsprechende Kapitel im Subversion-Buch.
Wenn Sie den Zielordner wie im obenstehenden Beispiel als Unterordner angeben, stellen Sie bitte sicher, dass alle Ordner dazwischen ebenfalls versioniert sind. Im obenstehenden Beispiel muss also der Ordner common
versioniert sein.
Der externe Verweis selber wird in den meisten Fällen korrekt funktionieren, auch wenn die dazwischenliegenden Ordner nicht versioniert sind. Es gibt jedoch einige Operationen, die sich dann nicht wie erwartet verhalten. Die überlagerten Symbole im Explorer werden ebenfalls nicht den korrekten Status anzeigen.
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.
Der Pfad zu einem externen Dateiverweis muss ein direktes Kind des Ordners sein, in dem Sie die Eigenschaft svn:externals
setzen.
Die URL für die externe Datei muss sich in demselben 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 Eigenschaft svn:externals
verändert werden.
Wenn Sie bereits eine Arbeitskopie mit den Dateien oder Ordnern haben, die Sie als Externals in eine andere Arbeitskopie einbinden wollen, können Sie diese einfach per Ziehen und Ablegen im Windows Explorer hinzufügen.
Ziehen Sie einfach das Objekt mit der rechten Maustaste von der einen Arbeitskopie an den Ort, an dem es als External eingebunden werden soll. Ein Kontextmenü erscheint, aus dem Sie die Funktion wählen. Dadurch wird die Eigenschaft svn:externals
automatisch gesetzt. Alles, was Sie danach tun müssen, ist die geänderte Eigenschaft zu übertragen und Ihre Arbeitskopie zu aktualisieren.