Subversion Zweig Wiedereingliederung
Frage
Wenn ein Zweig mit dem Stamm reintegriert wird, ist, dass Zweig effektiv tot?
Können Sie Änderungen an der Verzweigung nach der Wiedereingliederung machen und diejenigen, zurück in den Kofferraum zu einem späteren Zeitpunkt zusammenführen?
Lösung
Sie können es technisch tun, verzweigen Sie ist nicht tot, noch deaktiviert, aber es ist nicht von Ast zu Stamm nach Wiedereingliederung zu fusionieren empfohlen.
Sie können eine vollständige Diskussion über den Grund dafür finden, hier: Subversion Merge reintegrieren
Im Grunde sagt es, dass es möglich ist, die Änderungen wieder an den Stamm zu führen, aber da Sie Reintegration Kräfte von Stamm zu führen vor dem reintegrate Betrieb verzweigen werden Sie Reflektierende / Cyclic Merge werden mit Blick auf die sehr problematisch ist in Subversion 1.5.
Laut dem Artikel, ist es empfehlenswert, Ihren reintegriert Zweig unmittelbar nach Reintegration zu löschen und einen neuen mit den gleichen (oder anders) Namen statt erstellen.
Dies ist ein bekanntes Subversion Verhalten, die in zukünftigen Versionen angesprochen werden (wahrscheinlich in 1.6)
Andere Tipps
Eigentlich benötigen Sie einen --record-only
merge vom Stamm in Ihrer Filiale der Revision zu tun, die von der --reintegrate
erstellt wurde begehen:
$ cd trunk
$ svn merge --reintegrate ^my-branch
$ svn commit
Committed revision 555.
# This revision is ^^^^ important
Und Sie jetzt aufzeichnen
$ cd my-branch
$ svn merge --record-only -c 555 ^trunk
$ svn commit
Sie sind jetzt glücklich um den Zweig zu halten
Weitere Informationen finden Sie in Kapitel 4. Verzweigen und Zusammenführen, Advanced Merging .
Nachdem Sie von einem Zweig in den Stamm zu reintegrieren, sollten Sie eines von zwei Dingen tun:
-
löschen Ihre Niederlassung . Dies ist die einfachste, aber es macht es schwieriger, den Zweig der Geschichte zu sehen.
-
Sagen Ihre Branche nicht die reintegrate zu verschmelzen verpflichten . Wenn Sie an den Stamm reintegrieren und begehen sie als Revision X, können Sie diesen Befehl auf dem Zweig laufen:
svn merge --record-only -c X url-to-trunk
. Allerdings sollten Sie dies nicht tun, wenn Sie die Änderungen im Rahmen begehen gemacht, andere als die Zusammenführung selbst. Alle anderen Änderungen wird es nie in Ihrer Branche machen zurück.
Einige Ratschläge um die Änderungen auf verschmelzenden zurück, wenn jemand macht Änderungen an den Zweig mehrmals (vor 1.5): Denken Sie daran, bei der Revision Sie die Zusammenführung tat ! Entweder schreibt die Versionsnummern nach unten irgendwo, oder (was einfacher ist) macht einen Tag . (Sie können es später natürlich herausfinden, aber das ist ein PITA.)
Beispiel:
Sie haben ein Repository Layout wie folgt aus:
/your_project
/trunk
/branches
/tags
Lassen Sie uns sagen, es ist eine Web-Anwendung, und Sie haben geplant, um eine Freigabe zu machen. Sie würden einen Tag erstellen, und von diesen (oder vom Stamm) ein Zweig, in dem Sie tun, um die Fehlerbehebung:
/your_project
/trunk
/branches
/1.0.0-bugfixes
/tags
/1.0.0
es auf diese Weise tun, können Sie die neuen Funktionen in den Kofferraum integrieren. Alle Fehlerbehebung nur innerhalb des Bugfix-Zweiges passieren würden, und vor jeder Freigabe Sie einen Tag der aktuellen Version machen (jetzt aus dem Bugfix-Zweig).
Nehmen wir an, Sie eine angemessene Menge von Bugfixing haben und diejenigen Server zur Produktion freigegeben, und Sie müssen eine dieser Funktionen verzweifelt im aktuellen Stamm:
/your_project
/trunk
/branches
/1.0.0-bugfixes
/tags
/1.0.0
/1.0.1
/1.0.2
Sie können nun integrieren nur die Änderungen zwischen 1.0.0 und 1.0.2 in Ihrem Kofferraum (vorausgesetzt, Sie in Ihrer Arbeitskopie sind):
svn merge http://rep/your_project/tag/1.0.0 http://rep/your_project/tag/1.0.2 .
Dies ist, was sollten Sie sich erinnern. Sie fusionierte bereits die Änderungen zwischen 1.0.0 und 1.0.2 auf dem Stamm. Nehmen wir an, es mehr Änderungen in der aktuellen Produktions-Release sind:
/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 sind nun bereit, die neue Version von Stamm zu lösen, aber die letzten Änderungen der Fehlerbehebung 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 auf dem Stamm zusammengeführt, und Sie können Ihre Freilassung machen (vergessen Sie nicht, es zu testen zuerst).
/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
Wie jeder hat schon gesagt, es hier: der Zweig nicht tot ist und verpflichtet sich der Zweig weiterhin ganz gut
.Manchmal wenn Sie den Zweig nach der Zusammenführung töten wollen. Die einzige zuverlässige Lösung ist, den Zweig zu löschen. Der Nachteil ist, dass dann schwieriger ist es den Zweig wieder zu finden, wenn Sie einen Blick auf sie haben wollte, sagen wir, aus historischen Gründen. Also, lassen viele Menschen der „wichtige“ Zweig herumliegen und eine Vereinbarung von ihnen nicht zu ändern. Ich wünschte, es war ein Weg, um einen Zweig tot / Read-only zu markieren, so dass niemand zu gewährleisten, um es bis auf weiteres begehen kann.
Nein, ist der Zweig noch am Leben, aber in diesem Moment, es ist genau die gleiche wie die Stamm. Wenn Sie auf dem Zweig weiterentwickeln, können Sie mit dem Stamm neu fusionieren später.
Sie können von einem Zweig mit dem Stamm oder Stamm zu einem Zweig zusammenführen, so oft wie Sie wollen.
Zunächst einmal sollten Sie Ihr Subversion-Client und Server aktualisieren, wenn Sie noch Subversion 1.7 oder älter verwenden. Es gibt keinen Grund zu sehr alte Subversion Versionen verwendet werden. Ab 2016 ist die aktuelle Version von Subversion 1.9. SVN 1.8 ist auch jetzt unterstützt und erhält immer noch Fehlerbehebung.
Das Problem Sie fragen wurde in Subversion 1.8 gelöst. Beginnend mit SVN 1.8, hat --reintegrate
Option gewesen veraltet . Reintegrieren Merges werden nun durchgeführt automatisch . Siehe Subversion 1.8 Release Notes Eintrag zur Verbesserung bezogen.
Lesen Sie SVNBook 1.8 | Reintegration einen Zweig :
Wenn Sie nicht Ihre Niederlassung zu löschen, nachdem es auf die Reintegration trunk Sie die Synchronisierung durchführen verschmilzt aus dem Kofferraum fortsetzen kann und dann reintegrieren wieder den Zweig. Wenn Sie dies tun, ist nur die Änderungen an Ihre Niederlassung nach dem ersten reintegrate ist mit dem Stamm zusammengeführt.
...
Nur Subversion 1.8 unterstützt diese Wiederverwendung eines Zweiges. Vorhin Versionen erfordern eine spezielle Handhabung, bevor ein Funktionszweig sein kann mehr als einmal reintegriert. Siehe die frühere Version dieses Kapitels für mehr Informationen: http://svnbook.red -bean.com/en/1.7/svn.branchmerge.basicmerging.html#svn.branchemerge.basicmerging.reintegrate
Wenn Sie eine Zusammenführung zu tun, können Sie das Ziel angeben. Sie können die Unterschiede von TreeA und TreeB zu TreeC zusammenführen, wenn Sie möchten. Wie Chris schon sagt, ist Ihre Frage nicht wirklich so viel Sinn machen. Wenn Sie Ihren Zweig in den Stamm zusammenführen, bleibt die Filiale unberührt. Wenn die Verzweigung nicht danach benötigt wird, könnten Sie es löschen.
Sie können auf dem Zweig auf der Entwicklung halten, die Funktion müssen Sie fusionieren-Tracking , die in Subversion 1.5 ist, bedeutet dies, dass zusätzliche verschmilzt aus der Branche nur neue Änderungen beinhalten.