Externe Objekte

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.

Externe Ordner

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 Windows MenüEigenschaften aus dem Kontextmenü. Der Windows Eigenschaften-Dialog erscheint, auf dessen Subversion Tab Sie Eigenschaften anschauen, verändern oder setzen können. Klicken Sie auf Eigenschaften.... Im TortoiseSVN Eigenschaften-Dialog machen Sie entweder einen Doppelklick auf svn:externals, falls der Eintrag existiert oder klicken Sie auf Neu... und wählen Sie externals aus dem Menü. Dann füllen Sie den Dialog mit den benötigten Informationen aus.

Achtung

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, 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.

Nutze explizite Revisionsnummern

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.

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 ist, 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 svn:externals Eigenschaft ist auf trunk gesetzt.

Relativ zum Elternverzeichnis

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.

Relativ zur Wurzel des Projektarchivs

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/werkzeug/hammer  gemeinsam/hammer-werkzeug

Dadurch wird http://example.com/svn/repos-2/werkzeug/hammer in C:\Projekt\gemeinsam\hammer-werkzeug extrahiert.

Relativ zum Schema

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.

Relativ zum Rechnernamen des Servers

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 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.

Wichtig

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“.

Externe Dateien

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 Kund des Ordners sein, in dem Sie die svn:externals Eigenschaft setzen.

  • 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.

Externals per Ziehen und Ablegen erstellen

Wenn Sie bereits eine Arbeitskopie mit den Dateien oder Ordnern, die Sie als Externals in eine andere Arbeitskopie einbinden wollen, haben, können Sie diese einfach per Ziehen und Ablegen im Windows Explorer hinzufügen.

Ziehen Sie einfach mit der rechten Maustaste das Objekt von der einen Arbeitskopie an den Ort, an dem es als External eingebunden werden soll. Ein Kontextmenü erscheint, aus dem Sie die FunktionSVN Als External hier hinzufügen wählen. Dadurch wird die svn:externals Eigenschaft automatisch gesetzt. Alles, was Sie danach tun müssen, ist die geänderte Eigenschaft zu übertragen und Ihre Arbeitskopie zu aktualisieren.