it-swarm.com.de

Wiedereingliederung von Subversion-Zweigen

Wenn ein Zweig wieder in den Stamm integriert wird, ist dieser Zweig dann tatsächlich tot?

Können Sie nach der Wiedereingliederung Änderungen am Zweig vornehmen und diese zu einem späteren Zeitpunkt wieder in den Stamm einbinden?

68
Aaron Smith

Sie können dies technisch tun, da Ihr Zweig weder tot noch deaktiviert ist. Es wird jedoch nicht empfohlen, ihn nach der Wiedereingliederung vom Zweig zum Trunk zusammenzuführen.

Eine ausführliche Beschreibung des Grundes finden Sie hier: Subversion Merge Reintegrate

Grundsätzlich heißt es, dass es möglich ist, Ihre Änderungen wieder in den Trunk einzufügen, aber da die Wiedereingliederung Sie dazu zwingt, vor der Wiedereingliederung von Trunk zu Zweig zu wechseln, werden Sie mit Reflective/Cyclic Merge konfrontiert sein, was in Subversion 1.5 sehr problematisch ist .
Gemäß dem Artikel wird empfohlen, Ihren reintegrierten Zweig sofort nach der Reintegration zu löschen und stattdessen einen neuen Zweig mit demselben (oder einem anderen) Namen zu erstellen.

Dies ist ein bekanntes Subversion-Verhalten, das in zukünftigen Versionen (wahrscheinlich in 1.6) behoben wird.


79
Pini Reznik

Tatsächlich müssen Sie eine Zusammenführung von --record-only Aus dem Trunk in Ihren Zweig der Revision durchführen, die mit dem Commit --reintegrate Erstellt wurde:

$ cd trunk
$ svn merge --reintegrate ^my-branch 
$ svn commit

Committed revision 555. 
# This revision is ^^^^ important

Und jetzt nimmst du es auf

$ cd my-branch
$ svn merge --record-only -c 555 ^trunk 
$ svn commit

Sie sind glücklich, die Niederlassung jetzt zu behalten

Weitere Informationen finden Sie in Kapitel 4. Verzweigen und Zusammenführen, Erweitertes Zusammenführen.

17
krico

Nach der Wiedereingliederung von einem Ast in den Stamm sollten Sie eine der beiden folgenden Aktionen ausführen:

  • Zweig löschen . Dies ist am einfachsten, erschwert jedoch die Anzeige der Filialgeschichte.

  • Weisen Sie Ihren Zweig an, das Festschreiben für die Wiedereingliederung nicht zusammenzuführen. . Wenn Sie sich erneut in den Trunk integrieren und ihn als Revision X festschreiben, können Sie diesen Befehl in Ihrem Zweig ausführen: svn merge --record-only -c X url-to-trunk. Sie sollten dies jedoch nicht tun, wenn Sie im Rahmen des Commits Änderungen vorgenommen haben, die nicht die Zusammenführung selbst betreffen. Alle anderen Änderungen gelangen niemals zurück in Ihre Filiale.

8
JW.

Einige Ratschläge zum Zusammenführen der Änderungen, wenn jemand mehrmals Änderungen an der Verzweigung vornimmt (vor 1.5): Denken Sie daran, bei welcher Revision Sie die Zusammenführung vorgenommen haben! Schreiben Sie entweder die Revisionsnummern auf, oder (was einfacher ist) erstellen Sie ein Tag. (Sie können es natürlich später herausfinden, aber das ist eine PITA.)

Beispiel:

Sie haben ein Repository-Layout wie dieses:

/your_project
  /trunk
  /branches
  /tags

Nehmen wir an, es handelt sich um eine Webanwendung, und Sie haben vor, eine Veröffentlichung zu veröffentlichen. Sie würden ein Tag erstellen und daraus (oder aus dem Trunk) einen Zweig, in dem Sie die Bugfixes vornehmen:

/your_project
  /trunk
  /branches
    /1.0.0-bugfixes
  /tags
    /1.0.0

Auf diese Weise können Sie die neuen Funktionen in den Kofferraum integrieren. Alle Bugfixes würden nur innerhalb des Bugfix-Zweigs auftreten und vor jedem Release würden Sie ein Tag der aktuellen Version (jetzt aus dem Bugfix-Zweig) erstellen.

Nehmen wir an, Sie haben eine Menge Bugfixes durchgeführt und diese auf dem Produktionsserver veröffentlicht, und Sie benötigen dringend eine dieser Funktionen im aktuellen Trunk:

/your_project
  /trunk
  /branches
    /1.0.0-bugfixes
  /tags
    /1.0.0
    /1.0.1
    /1.0.2

Sie können die Änderungen zwischen 1.0.0 und 1.0.2 jetzt einfach in Ihren Trunk integrieren (vorausgesetzt, Sie befinden sich in Ihrer Arbeitskopie):

svn merge http://rep/your_project/tag/1.0.0 http://rep/your_project/tag/1.0.2 .

Daran sollten Sie sich erinnern. Sie haben die Änderungen zwischen 1.0.0 und 1.0.2 bereits auf dem Trunk zusammengeführt. Angenommen, es gibt weitere Änderungen in der aktuellen Produktionsversion:

/your_project
  /trunk
  /branches
    /1.0.0-bugfixes
  /tags
    /1.0.0
    /1.0.1
    /1.0.2
    /1.0.3
    /1.0.4

Sie können jetzt die neue Version von trunk freigeben, aber die letzten Änderungen Ihrer Bugfixes fehlen noch:

svn merge http://rep/your_project/tag/1.0.2 http://rep/your_project/tag/1.0.4 .

Jetzt haben Sie alle Änderungen in Ihrem Kofferraum zusammengeführt, und Sie können Ihre Freigabe vornehmen (vergessen Sie nicht, es zuerst zu testen).

/your_project
  /trunk
  /branches
    /1.0.0-bugfixes
    /1.1.0-bugfixes
  /tags
    /1.0.0
    /1.0.1
    /1.0.2
    /1.0.3
    /1.0.4
    /1.1.0
3
Mauli

Wie jeder hier schon gesagt hat: Die Filiale ist nicht tot und Commits für die Filiale können problemlos fortgesetzt werden.

Manchmal möchten Sie jedoch den Zweig nach dem Zusammenführen beenden. Die einzige zuverlässige Lösung ist das Löschen der Verzweigung. Der Nachteil ist, dass es dann schwieriger ist, die Filiale wieder zu finden, wenn Sie sie beispielsweise aus historischen Gründen ansehen möchten. So lassen viele Leute die "wichtigen" Zweige herumliegen und haben eine Vereinbarung, sie nicht zu ändern. Ich wünschte, es gäbe eine Möglichkeit, eine Niederlassung als tot/schreibgeschützt zu kennzeichnen, um sicherzustellen, dass sich bis auf weiteres niemand dazu verpflichten kann.

2
Alexander

Nein, der Zweig lebt noch, aber in diesem Moment ist er genau derselbe wie der Stamm. Wenn Sie sich auf dem Zweig weiterentwickeln, können Sie sich später wieder mit dem Stamm verbinden.

2
Ben Hoffstein

Sie können beliebig oft von einem Zweig zu einem Stamm oder von einem Stamm zu einem Zweig zusammenführen.

1

Zunächst sollten Sie Ihren Subversion-Client und -Server aktualisieren, wenn Sie noch Subversion 1.7 oder älter verwenden. Es gibt keinen Grund, sehr alte Subversion-Versionen zu verwenden. Ab 2016 ist die aktuelle Version Subversion 1.9. SVN 1.8 wird jetzt ebenfalls unterstützt und erhält weiterhin Fehlerbehebungen.

Das Problem, nach dem Sie fragen, wurde in Subversion 1.8 gelöst. Beginnend mit SVN 1.8, --reintegrate Option wurde veraltet . Zusammenführungen neu integrieren werden jetzt automatisch ausgeführt . Siehe Versionshinweise zu Subversion 1.8 in Bezug auf die Verbesserung .

Lesen Sie SVNBook 1.8 | Wiedereingliederung eines Zweigs :

Wenn Sie Ihren Zweig nach der Wiedereingliederung in den Trunk nicht löschen möchten, können Sie die Synchronisierung des Trunks fortsetzen und den Zweig dann erneut integrieren. In diesem Fall werden nur die Änderungen, die nach der ersten Wiedereingliederung in Ihrem Zweig vorgenommen wurden, in den Stamm übernommen.

...

Nur Subversion 1.8 unterstützt diese Wiederverwendung eines Feature-Zweigs. Frühere Versionen erfordern eine spezielle Behandlung, bevor ein Feature-Zweig mehrmals neu integriert werden kann. Weitere Informationen finden Sie in der früheren Version dieses Kapitels: http://svnbook.red-bean.com/de/1.7/svn.branchmerge.basicmerging.html#svn.branchemerge.basicmerging.reintegrate

1
bahrep