Wenn Sie in ein bereits existierendes Projektarchiv importieren, das schon einige Projekte enthält, ist dessen Struktur bereits festgelegt. Wenn Sie Daten in ein neues Projektarchiv importieren, sollten Sie sich vorher darüber Gedanken machen, wie Sie es organisieren. Lesen Sie „Struktur des Projektarchivs“ für weitere Hinweise.
Dieser Abschnitt beschreibt den Import-Befehl von Subversion, der dazu gedacht ist, eine Verzeichnisstruktur in ein Projektarchiv zu importieren. Obwohl er für diese Aufgabe geeignet ist, besitzt er doch einige Nachteile:
Es gibt, abgesehen von den globalen Ignoriermustern, keine Möglichkeit Dateien oder Ordner einzuschließen.
Der importierte Ordner wird nicht zu einer Arbeitskopie. Sie müssen eine Arbeitskopie aus dem Projektarchiv auschecken.
Es kann leicht passieren, dass Sie die Daten in einen falschen Ordner im Projektarchiv importieren.
Aus diesen Gründen empfehlen wir, dass Sie den Import-Befehl gar nicht nutzen sondern die in „Import an Ort und Stelle“ beschriebene zweistufige Methode. Aber da sie schon diesen Abschnitt lesen, folgt nun eine kurze Einführung ...
Bevor Sie ein Projekt in das Projektarchiv importieren sollten Sie:
Alle Dateien entfernen/löschen welche nicht unbedingt für das Projekt notwendig sind (z.B. temporäre Dateien, Dateien die vom Compiler erzeugt werden wie *.obj, kompilierte EXE Dateien, ...)
Die Dateien und Ordner optimal anordnen. Obwohl es auch später noch immer möglich ist, die Dateien und Ordner umzubenennen oder zu verschieben, ist es doch empfehlenswert, schon beim Importieren eine saubere Struktur zu haben.
Wählen Sie nun den übergeordneten Ordner Ihrer Ordnerstruktur im Windows Explorer und öffnen Sie mit einem Rechtsklick das Kontextmenü. Wählen Sie den Befehl → worauf der folgende Dialog erscheint:
In diesem Dialog geben Sie die URL des Projektarchivs ein, in das Sie Ihr Projekt importieren wollen. Es ist sehr wichtig zu verstehen, dass der lokale Ordner, den Sie importieren, nicht im Projektarchiv landet, sondern nur sein Inhalt. Wenn Sie z.B. die folgende Struktur haben:
C:\Projekte\Grafik\source C:\Projekte\Grafik\doku C:\Projekte\Grafik\bilder
und Sie importieren C:\Projekte\Grafik in http://meinserver.com/svn/trunk könnten Sie überrascht feststellen, dass Ihre Unterverzeichnisse direkt in trunk anstelle eines Grafik Unterverzeichnisses landen. Sie müssen das Unterverzeichnis als Teil der URL angeben http://meinserver.com/svn/trunk/Grafik. Beachten Sie, dass der Import-Befehl automatisch Unterverzeichnisse im Projektarchiv anlegt, falls diese noch nicht existieren.
Die Importmeldung wird als Logmeldung verwendet.
Standardmäßig werden Dateien und Ordner, die dem globalen Ignoriermuster entsprechen, nicht importiert. Um dieses Verhalten zu übergehen, aktivieren Sie die Option Ignorierte Dateien einschließen. Lesen Sie in „Allgemeine Einstellungen“ nach, wie man globale Ignoriermuster einrichtet.
Sobald Sie auf klicken, beginnt TortoiseSVN die Daten in das Projektarchiv zu importieren. Beachten Sie bitte, dass dadurch Ihr Importverzeichnis nicht unter Versionskontrolle gestellt wird! Um eine Arbeitskopie zu erhalten, in der die Daten unter Versionskontrolle sind müssen sie die Daten frisch aus dem Projektarchiv auschecken. Oder sie Lesen weiter, um herauszufinden wie man beim Import eine Arbeitskopie an Ort und Stelle erzeugen kann.
Angenommen, Sie haben bereits ein Projektarchiv und wollen eine neue Ordnerstruktur hinzufügen, folgen Sie diesen Schritten:
Erstellen Sie mit Hilfe des Projektarchivbetrachters einen neuen Ordner direkt im Projektarchiv.
Checken Sie den neu erstellten Ordner über den zu importierenden Ordner aus. Es wird eine Warnung angezeigt, dass der Zielordner nicht leer ist. Nun haben Sie einen lokal versionierten Ordner mit nicht versioniertem Inhalt.
Wählen Sie → auf dem versionierten Ordner, um Objekte zur Versionskontrolle hinzuzufügen. Sie können Dateien hinzufügen oder löschen, die svn:ignore Eigenschaft für Ordner setzen und weitere Änderungen vornehmen.
Übertragen Sie den obersten Ordner und sie erhalten nun eine versionierte Ordnerstruktur im Projektarchiv sowie eine Arbeitskopie, die aus dem existierenden Ordner heraus angelegt wurde.
Manchmal ist es notwendig, eine Datei unter Versionskontrolle zu haben, die benutzerspezifische Daten (z.B. absolute Pfade zu Anwendungen) enthält. Das bedeutet Sie haben eine Datei, die von jedem Benutzer verändert werden muss, um sie an seine lokalen Einstellungen anzupassen. Aber eine Datei unter Versionskontrolle würde von jedem Benutzer jeweils wieder zum Projektarchiv übertragen werden und so die Änderungen von anderen Benutzern wieder überschreiben.
In solchen Fällen empfehlen wir die Verwendung von so genannten Schablonen. Eine Schablone ist nichts anderes als eine normale Datei, welche entweder einen anderen Dateinamen oder eine andere Dateiendung hat als die Datei, welche schlussendlich verwendet wird.
Als Beispiel sehen Sie sich einmal das Erstellungsskript von TortoiseSVN an. Es ruft eine Datei namens TortoiseVars.bat auf, die im Projektarchiv gar nicht existiert! Es existiert aber die Datei TortoiseVars.tmpl, welche die Schablone für die Datei TortoiseVars.bat darstellt. Bevor also das Skript ausgeführt werden kann muss jeder Benutzer eine Kopie von TortoiseVars.tmpl erstellen und die Kopie in TortoiseVars.bat umbenennen. Dann kann die Datei TortoiseVars.bat ohne Probleme so verändert werden, dass die absoluten Pfade zu den zur Erstellung von TortoiseSVN notwendigen Programmen mit den lokalen Pfaden übereinstimmen.
Um die Benutzer nicht zu stören, ist die Datei TortoiseVars.bat auch in der Liste der ignorierten Dateien eingetragen. Das heißt wir haben die Subversion Eigenschaft svn:ignored für diese Datei gesetzt. Damit erscheint diese Datei nicht in jedem Übertragen-Dialog als (noch) nicht versioniert.
Manchmal ist es nützlich eine Arbeitskopie zu haben, die aus mehreren anderen Projekten besteht. Zum Beispiel kann es vorkommen, dass Sie Unterordner haben wollen, die von verschiedenen anderen Stellen des Projektarchivs kommen oder vielleicht sogar von verschiedenen Projektarchiven. Wenn Sie wollen, dass jeder Benutzer die gleiche Struktur der Arbeitskopie hat, können Sie das mit Hilfe der svn:externals Eigenschaft definieren.
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. Beachten Sie, dass Sonderzeichen in URLs korrekt ersetzt werden müssen (Leerzeichen z.B. durch %20), damit die externen Verweise funktionieren. Nehmen wir an, Sie haben folgende Eigenschaften auf D:\dev\projekt1 gesetzt:
sounds http://sounds.red-bean.com/repos quick_graphs http://graphics.red-bean.com/repos/fast%20graphics skins/toolkit -r21 http://svn.red-bean.com/repos/skin-maker
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.
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.
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 derselben 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.
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“.