Eine der Funktionen von Versionskontrollsystemen ist die Möglichkeit bestimmte isolierte Änderungen auf einer separaten Entwicklungslinie zu machen. Solche Linien werden Zweige genannt. Zweige werden üblicherweise dazu benutzt, um neue Funktionen auszutesten, ohne dadurch die normale Entwicklung am Projekt zu stören. Sobald dann eine solche neue Funktion stabil genug ist, wird der Zweig mit dem Stamm (trunk) zusammengeführt.
Eine andere wichtige Funktion ist die Möglichkeit, bestimmte Zustände zu markieren (z.B. eine Release-Version), damit es jederzeit möglich ist diesen bestimmten Zustand wieder herstellen zu können. Dieser Vorgang wird markieren genannt.
Subversion kennt keinen speziellen Befehl für das Verzweigen oder Markieren. Subversion benutzt stattdessen so genannte „billige Kopien“. Diese funktionieren ähnlich wie Verweise, d.h. es wird keine richtige Kopie erstellt sondern nur eine Verweis auf eine bestimmte Revision. Daraus ergibt sich, dass Verzweigungen oder Markierungen schnell zu erstellen sind und nahezu keinen zusätzlichen Platz im Projektarchiv benötigen.
Wenn Sie beim Importieren Ihres Projektes die empfohlene Ordnerstruktur verwendet haben, ist ein Verzweigen oder Markieren sehr einfach:
Wählen Sie den Ordner Ihrer Arbeitskopie von dem Sie eine Verzweigung oder Markierung erstellen wollen und wählen Sie den Befehl → im Kontextmenü.
Standardmäßig wird die Ziel-URL mit der Quell-URL Ihrer Arbeitskopie vorbelegt. Sie müssen nun diese URL in den Pfad Ihrer neuen Verzweigung oder Markierung ändern. Anstelle von
http://svn.collab.net/repos/ProjektName/trunk
könnte das neue Verzeichnis wie folgt lauten:
http://svn.collab.net/repos/ProjektName/tags/Release_1.10
Wenn Sie sich nicht mehr daran erinnern, welchen Namen Sie zuletzt vergeben hatten, klicken Sie einfach auf die rechte Schaltfläche. Damit öffnet sich der Projektarchivbetrachter und Sie können sich die Struktur des Projektarchivs ansehen.
Nun haben Sie mehrere Möglichkeiten, die Quelle der Kopie auszuwählen:
Der neue Zweig wird direkt im Projektarchiv als Kopie der HEAD Revision erstellt. Dabei werden keine Daten von Ihrer Arbeitskopie in das Projektarchiv übertragen und der Zweig kann sehr schnell erzeugt werden.
Der neue Zweig wird direkt im Projektarchiv kopiert, Sie können aber auch eine ältere Revision auswählen. Das ist dann nützlich, wenn Sie z.B. vergessen haben eine Markierung zu erstellen, als das Release in der letzten Woche erstellt wurde. Wenn Sie sich nicht mehr an die Revisionsnummer erinnern können, dann klicken Sie auf die Schaltfläche rechts und wählen die Revisionsnummer aus. Auch dabei werden keine Daten aus Ihrer Arbeitskopie an das Projektarchiv übertragen, so dass der Zweig sehr schnell erstellt werden kann.
Der neue Zweig ist eine identische Kopie Ihrer lokalen Arbeitskopie. Egal ob Sie einige Dateien durch die einer älteren Revision ersetzt haben, oder sie geändert haben, diese Dateien sind genau die, die in diesen Zweig kopiert werden. Natürlich erfordert diese aufwändige Markierung, dass Daten von Ihrer Arbeitskopie zurück in das Projektarchiv übertragen werden müssen, sofern sie dort noch nicht existieren.
Wenn Sie wollen, dass Ihre Arbeitskopie sofort zur neuen Verzweigung / Markierung wechselt, markieren Sie die Arbeitskopie zum neuen Zweig / Markierung wechseln Option. Wenn Sie das tun, stellen Sie bitte vorher sicher, dass Ihre Arbeitskopie keine Änderungen enthält. Wenn sie Änderungen enthält, werden diese beim Wechseln mit der Verzweigung zusammengeführt.
Klicken Sie , um die neue Kopie in das Projektarchiv zu übertragen und vergessen Sie dabei nicht, eine Logmeldung anzugeben. Beachten Sie, dass diese Kopie innerhalb des Projektarchivs angelegt wird.
Beachten Sie, dass das Anlegen eines Zweiges oder einer Markierung sich nicht auf Ihre Arbeitskopie auswirkt, es sei denn Sie haben die Option zum Wechseln auf den Zweig gleich mit aktiviert. Auch wenn Sie den Zweig aus der Arbeitskopie heraus erstellen, werden die Änderungen darin in den neuen Zweig übertragen und nicht in den Stamm. Die geänderten Dateien Ihrer Arbeitskopie bleiben als gegenüber dem Stamm verändert markiert.
...das ist hier (eigentlich nicht) die Frage. Während beim Auschecken eine neue Arbeitskopie (z.B. des neu erstellten Zweiges) erstellt wird, verändert der Befehl → Ihre bestehende Arbeitskopie so, dass diese genau wie der erstellte Zweig aussieht. Dabei werden nur die Unterschiede zwischen Ihrer bestehenden Arbeitskopie und dem Zweig des Projektarchivs übertragen, was sich natürlich günstig auf die Netzwerkauslastung und Ihre Geduld auswirkt.
Es gibt mehrere Möglichkeiten, mit Ihrer neuen Verzweigung oder Markierung weiterzuarbeiten. Sie können:
→ , um eine neue Arbeitskopie in einem leeren Verzeichnis zu erstellen. Sie können von einem Projektarchiv so viele Arbeitskopien erstellen, wie Sie möchten.
Wechseln Sie mit Ihrer Arbeitskopie zu Ihrer neuen Kopie im Projektarchiv. Dazu wählen Sie → aus dem Kontextmenü.
Im folgenden Dialog geben Sie die URL des Zweiges an, den Sie gerade erzeugt haben. Wählen Sie die Option HEAD Revision und bestätigen Sie mit . Ihre Arbeitskopie wird nun auf den neuen Zweig / die neue Markierung umgestellt.
„Wechseln zu“ wird genau so wie „Aktualisieren“ niemals lokale Änderungen verwerfen. Sämtliche noch nicht übertragene Änderungen werden beim Wechseln mit den Daten aus dem Projektarchiv zusammengeführt. Wenn Sie das nicht wünschen, müssen Sie entweder die Änderungen übertragen oder verwerfen, bevor Sie „Wechseln zu“ aufrufen.
Wenn Sie auf dem Stamm und einer Verzweigung gleichzeitig arbeiten wollen, aber nicht auf ein vollständiges Auschecken warten wollen, können Sie mit dem Explorer Ihr Arbeitskopie kopieren und mit der Kopie über → auf den Zweig wechseln.
Obwohl Subversion keine Unterscheidung zwischen tags und branches macht, werden sie normalerweise unterschiedlich genutzt.
Tags (=Marken) werden typischerweise dafür verwendet, einen Entwicklungszeitpunkt einzufrieren . Als solche werden sie normalerweise nicht für die Weiterentwicklung genutzt. Dafür sind branches gedacht. Das ist auch der Hauptgrund, warum wir die /trunk /branches /tags Struktur für Projektarchive empfehlen. Änderungen an einer markierten Revision vorzunehmen ist keine gute Idee, aber da die Daten in Ihrer Arbeitskopie nicht schreibgeschützt sind, kann es aus Versehen doch passieren. TortoiseSVN wird Sie jedoch warnen, wenn Sie versuchen, Änderungen in einem Pfad im Projektarchiv zu übertragen, den die Zeichenfolge /tags enthält.
Möglicherweise wollen Sie doch weitere Änderungen an einer Revision vornehmen, die Sie bereits markiert haben. Die korrekte Vorgehensweise ist, zunächst per Verzweigen/Markieren einen neuen Zweig aus der Marke (z.B. /branches/Version_1.0.x aus /tags/Version_1.0) zu erzeugen und die Änderungen auf dem Zweig durchzuführen. Wenn Sie Ihre Änderungen durchgeführt haben, erzeugen Sie eine neue Marke z.B. /tags/Version_1.0.1 aus dem Zweig an dem Sie gearbeitet haben.
Wenn Sie eine Arbeitskopie, die auf einem Zweig basiert verändern und die Änderungen übertragen, gehen diese in den neuen Zweig und nicht in trunk. Nur die Unterschiede werden gespeichert. Der Rest bleibt eine billige Kopie.