Trunk zusammenführen, um in Subversion zu verzweigen


75

Ich verwende Subversion 1.4.6 und kann derzeit kein Upgrade auf Version 1.5 durchführen.

Die Situation:

  1. Der Kofferraum weist viele strukturelle Änderungen auf (dh meistens Verschieben von Dateien).

  2. Ich habe einen Zweig, der vor kurzem aus dem Stamm zusammengeführt wurde, aber vor den großen Änderungen.

Was ist der beste Weg, um den Stamm mit dem Zweig zusammenzuführen?

Was ich vorhatte:

  1. Führen Sie zunächst den Zweig sorgfältig mit dem Trunk zusammen, indem Sie nur die geänderten Dateien im Zweig mit dem Trunk zusammenführen.

  2. Kopieren Sie den Stamm in den Zweig. Was ist der beste Weg, um dies zu tun, ohne die Filialgeschichte zu verlieren? Sollte ich den Zweig ablehnen und einen neuen erstellen?


Okay, es sieht so aus, als hätte ich SVN nicht genug Anerkennung gegeben. Es ist doch klug genug. Die Ausgabe von "D" und "A" hat mich nur abgeschreckt, aber im Hintergrund hat es einen Zug gemacht.


1
Die Frage und die Antworten sind relevant für sehr alte SVN Client- und Serverversionen und sind nicht relevant für SVN 1.5+ und insbesondere SVN 1.8+
bahrep

Antworten:


88

Gibt es etwas, das Sie daran hindert, alle Revisionen im Trunk seit der letzten Zusammenführung zusammenzuführen?

svn merge -rLastRevisionMergedFromTrunkToBranch:HEAD url/of/trunk path/to/branch/wc

sollte gut funktionieren. Zumindest, wenn Sie alle Änderungen am Trunk in Ihrem Zweig zusammenführen möchten.


3
Wenn ich es trocken laufen ließ, gab es viele "D" und "A" für viele Dateien, da die Dateien im Kofferraum verschoben wurden. Meine Frage ist, ob sich SVN in diesem Fall an den Verlauf der Dateien erinnert.
Gilad Naor

Haben Sie beim Verschieben von Dateien im Trunk svn rename verwendet? Wenn Sie dies getan haben, sollte die Geschichte bleiben. Ich denke, Sie sollten dies in kleinem Maßstab versuchen - erstellen Sie ein neues Repository, einen Trunk mit einer einzelnen Datei, einen Zweig mit einer Änderung, führen Sie eine SVN-Umbenennung für den Trunk durch und überprüfen Sie, ob ein Verlauf vorhanden ist.
Yuval F

1
Wie kann ich wissen, welche letzte Revision von Stamm zu Zweig zusammengeführt wurde?
Leandro López

1
In neueren Versionen von svn wird es als Dateieigenschaft gespeichert (irgendwo?, vielleicht im Stammverzeichnis). In älteren Versionen werden diese Informationen nicht gespeichert. Sie müssen manuell danach suchen. Durchsuchen Sie das Protokoll nach dem Commit der letzten Zusammenführung. (Dies ist eine große Unannehmlichkeit. Git, Mercurial, Bazaar haben diese Einschränkungen nicht)
Ronny Brendel

2
Eine gute Anleitung finden Sie hier: stereointeractive.com/blog/2009/02/17/…
David d C e Freitas

16

Die letzte Revision, die von Trunk zu Branch zusammengeführt wurde, kann durch Ausführen dieses Befehls im Arbeitskopieverzeichnis gefunden werden:

svn log -v --stop-on-copy

4
Dadurch wird das Protokoll nur gestoppt, als der Zweig erstellt wurde. Es werden keine Zusammenführungen angezeigt, die nach diesem Zeitpunkt stattgefunden haben.
Moswald

2
Denn mit dieser kleinen Einschränkung von @moswald kann es sehr nützlich sein, dies zu wissen. Ich sehe das Problem nicht. Normalerweise habe ich keine langlebigen Äste (höchstens eine Woche), daher ziehe ich normalerweise erst kurz vor der Wiedereingliederung aus dem Stamm.
Andrew Backer

12

Es ist eine „altmodische“ Methode, Bereiche von Revisionen anzugeben, die Sie zusammenführen möchten. Mit 1.5+ können Sie verwenden:

svn merge HEAD url/of/trunk path/to/branch/wc

4
Ich verwende 1.6.11 und es bringt mich dazu, einen Bereich einzugeben.
Brent212

18
Musst du überhaupt so viel sagen? Was ist falsch an 'svn merge / url / of / trunk' in der Arbeitskopie?
GreenAsJade

1
svn: E195002: Ungültige Zusammenführungsquelle 'HEAD'; Ein Arbeitskopiepfad kann nur mit einer Repository-Revision (einer Nummer, einem Datum oder einem Kopf) verwendet werden
Solo

2
Bei @Solo HEAD müssen Sie zwar eine Versionsnummer angeben, HEAD muss jedoch nicht mehr verwendet werden. Wie GreenAsJade erwähnt, hat "svn merge / url / of / trunk path / to / branch / wc" für mich funktioniert.
Tim Smit

Die Antwort sollte überarbeitet werden, um "HEAD" zu entfernen
Jeff
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.