2009-02-25 4 views
30

Angenommen, die Leute haben am Stamm und an einem Zweig eines Subversion-Repositorys gearbeitet. Ich möchte alle Änderungen auf dem Stamm verwerfen und durch eine Kopie des Zweiges ersetzen.Stamm mit Zweig in Subversion ersetzen

Wie in another question vorgeschlagen, kann ich einfach den Stamm verschieben oder entfernen und dann den Zweig in den Stamm kopieren. Aber dann wird die Geschichte des Stammes durch die Geschichte des Zweiges ersetzt. Was, wenn ich die Geschichte des Stammes behalten möchte?

Ich denke, was ich will ist so etwas wie eine Zusammenführung, aber eine, wo die Änderungen des Ziels ignoriert werden, und nur mit der Quelle ersetzt. Wie würde ich das in Subversion machen? Wird dies als gute Praxis angesehen?

+0

Sie können immer noch auf den Stammverlauf zugreifen, indem Sie alte Revisionen durchsuchen ... –

+0

Aber jedes Tool, das den Verlauf einer Datei betrachtet (z. B. Subclipse), zeigt nur die Revisionen für den Zweig an. Nach dem Zusammenführen/Kopieren würde ich es vorziehen, eine neue Revision auf dem Stamm zu sehen, die alle Hinzufügungen/Änderungen/Entfernt von dem Kopiervorgang enthält. –

+0

+1: Ich muss das auch tun. @JW Hast du das zur Arbeit gebracht? –

Antwort

4

Merge alle Änderungen aus der Branche an den Stamm, und lösen dann alle Konflikte mit

svn resolve path --accept theirs-full 

Oder Sie die Zusammenführung sagen kann, das zu tun:

svn merge -rX:HEAD url/of/branch trunk\wc --accept theirs-full 

Nach einer solchen Zusammenführung, Sie haben eine Arbeitskopie, die wie die auf dem Zweig aussieht. Alles, was Sie tun müssen, ist, die Arbeitskopie des Trunks zu übernehmen.

+3

werden nicht die Änderungen beibehalten, die seit dem Verzweigungspunkt am Stamm vorgenommen wurden (zumindest, wenn kein Konflikt besteht)? Ich bin mir ziemlich sicher, dass das Ergebnis einer solchen Zusammenführung wird nicht wie der Stamm aussehen garantiert, aber Sie sind der Experte ... – rmeador

+1

Sie zuerst eine Rückwärts auf dem Stamm verschmelzen tun könnten alle Änderungen rückgängig zu machen, da Sie den Zweig erstellt, dann begehe diese umgekehrte Zusammenführung. Danach können Sie den Zweig mit dem Stamm zusammenführen. – Stefan

+0

Was ist mit einem einfachen 'Svn RM Trunk' gefolgt von 'Svn Copy Branch Trunk' (oder svn Zweig Zweig verschieben)? –

1

Ich bin mir nicht ganz sicher, ich verstehe, was Sie versuchen zu tun. Was möchten Sie mit allen Änderungen, die am Stamm vorgenommen wurden, nachdem der Zweig erstellt wurde, passieren? Möchten Sie, dass sie nicht im Protokoll angezeigt werden, wenn Sie den Verlauf einer Datei nach der Zusammenführung anzeigen? Wenn ja, erhalten Sie das, wenn Sie den Stamm löschen und den Zweig an seinen Platz kopieren. Der Zweig teilt den Verlauf mit dem Stamm, bevor er verzweigt wird. Er ist also derselbe, mit Ausnahme der nach dem Zweig durchgeführten Revisionen.

Wenn Sie die Geschichte des Stammes behalten möchten, aber nur auf alle Änderungen zwischen Verzweigen und Zusammenführen stampfen, ist das ein etwas komplizierteres Problem. Ich denke, wenn Sie eine Zusammenführung durchführen, die Vorfahren ignoriert (es gibt eine Option --ignore-ancestry), wird es den Inhalt der Amtsleitung durch den Zweig ersetzen. Sie können auch die Option --force mit der Zusammenführung versuchen (beide anstelle und in Verbindung mit --ignore-ancestry). Versuchen Sie es ein paar verschiedene Möglichkeiten, um zu sehen, ob Sie die gewünschten Ergebnisse erhalten ...

Wenn das fehlschlägt, können Sie alle Änderungen am Stamm seit dem Verzweigungspunkt immer wieder zusammenführen und dann in der Verzweigung zusammenführen. Dies scheint wahrscheinlich einige Konflikte zu verursachen, die Sie natürlich mit der Version von Ihrem Zweig lösen möchten. Ich weiß nicht, ob diese Ideen optimal sind.

+0

Ich möchte die zweite Ihrer beiden Optionen - stampfen auf alle Änderungen im Kofferraum. –

4

Pre-1.5 Dies ist einfach: Stellen Sie sicher, dass Ihre Arbeitskopie auf Trunk zeigt, dann "svn merge url-of-trunk url-of-branch". Die Änderungen, die Sie erhalten, sind das Delta zwischen Trunk und Branch. Geben Sie mir also "alles, was nötig ist, damit der Stamm wie ein Zweig aussieht".

Ich habe keine Ahnung, ob die neuen Merge-Funktionen von 1.5 dieses Szenario ändern.

+1

Das Zusammenführen von Verzweigung zu Amtsleitung führt möglicherweise nicht zum selben Ergebnis wie das Kopieren des Verzweigungsstatus anstelle der Amtsleitung. Nicht einmal in Versionen vor 1.5 – JanM

32

Obwohl es ein ziemlich alten Thread aber teilen immer noch meine Erfahrung

Vor kurzem haben wir diese für eines unserer Projekte haben und folgten Richtlinien:

svn copy <repos/trunk> <repos/tag/old_trunk> -m "copied old trunk as tag" 

svn delete <repos/trunk> -m "deleted trunk temporarily" 

svn copy <repos/branch/new_fetaure_branch> <repos/trunk> -m "placed new trunk with features" 

Nach diesen Schritten hielt den Stamm Geschichte intakt und ersetzen Sie den neuen Feature-Zweig als Trunk.

+0

Wenn Sie sich den Verlauf des aktuellen Trunks ansehen, sehen Sie den Verlauf des neuen Zweiges bis zu dem Punkt, an dem Sie ihn kopiert haben. Um den Verlauf des alten Stamms anzuzeigen, müssen Sie die Revision angeben, bevor sie gelöscht wurde. –

+0

können Sie alte Stammhistorie im/tag/old_trunk sehen –

+0

Ich benutze Schildkröte, aber das wird meine Strategie sein. –

0
trunk  remplace (trunk with your branch) 
*----x  * ----> 
\   | 
    \   | 
    *--------| 
    branch 

Dieser Zweig wurde aus Stamm erstellt so vorsichtig sein, von nicht brutal den Stamm (Probleme mit der Abstammung) löschen. machen einen Tag mit Ihrem Stamm, Ihr Backup auf jeden Fall ...

Ich schlage vor, wie dies zu tun:

Verwendung von Eclipse SVN

  1. Klick rechts> Team Verzweigen/Tag (erstellen Sie ein Tag - Ihr Backup)

  2. Team> Schalter einen anderen Zweig/Tag ... wählen Sie Ihre Branche, stellen Sie sicher, dass die Verzweigung korrekt geladen wird.

  3. in der Branche: Team> trennen. Lösche SVN-Info.

  4. Team> Aktie Projekt ... wählen Ihren Kofferraum.

  5. Team> begeht in Ihrem Kofferraum.

  6. Klick rechts ... wählen Vergleichen mit .. Verzweigen/Tag -> Look für Ihre Branche. Wenn alles in Ordnung ist, haben Sie: "Es gibt keine Unterschiede zwischen den ausgewählten Eingaben."

Ich hoffe es hilft.

Verwandte Themen