Wenn ein Zweig in den Stamm reintegriert ist, ist dieser Zweig effektiv tot?Subversion Branch Reintegration
Können Sie nach der Reintegration Änderungen am Zweig vornehmen und diese zu einem späteren Zeitpunkt wieder in den Stamm zusammenführen?
Wenn ein Zweig in den Stamm reintegriert ist, ist dieser Zweig effektiv tot?Subversion Branch Reintegration
Können Sie nach der Reintegration Änderungen am Zweig vornehmen und diese zu einem späteren Zeitpunkt wieder in den Stamm zusammenführen?
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 eine vollständige Diskussion über den Grund dafür finden, hier: Subversion merge reintegrate
Grundsätzlich heißt es, dass es möglich ist, die Änderungen wieder an den Stamm zu führen, aber da Sie Reintegration Kräfte von Stamm führen Wenn Sie sich vor der Reintegrationsoperation verzweigen, werden Sie mit Reflective/Cyclic Merge konfrontiert, was in Subversion 1.5 sehr problematisch ist.
Dem Artikel zufolge ist es empfehlenswert, Ihren reintegrierten Zweig sofort nach der Reintegration zu löschen und stattdessen einen neuen mit demselben (oder anderen) Namen zu erstellen.
Dies ist ein bekanntes Subversion Verhalten, das in zukünftiger Version adressiert werden (wahrscheinlich in 1,6)
Weiß jemand, ob das Wiedereingliederungsproblem in Subversion 1.6 gelöst wurde? – bradhouse
+1 Großer Artikel – MPritchard
Ich habe Svn v1.6 in http://stackoverflow.com/questions/3309602 angesprochen. Die kurze Version: Ja, Sie können mehrmals reintegrieren. :) –
Nein, der Zweig ist noch am Leben, aber in diesem Moment ist es genau der gleiche wie der Stamm. Wenn Sie sich in der Branche weiterentwickeln, können Sie später wieder mit dem Stamm verbinden.
Nur die Protokolle sind unterschiedlich. Das Protokoll auf dem Zweig wird detaillierter sein und zum Beispiel den wahren Autor enthalten. – Hugo
Bitte beachten Sie die Antwort von Pini Reznik und dem darin referenzierten Artikel, aus dem Grund, warum Sie * die * Verzweigung nicht weiter verwenden sollten (auch wenn es technisch möglich ist). – mhagger
Im Ernst, tu es nicht. Es wird dir eine Welt der Schmerzen verursachen. Löschen Sie den Zweig, erstellen Sie ihn neu. Ich werde dir ein verschlossenes Glas meiner Tränen der Trauer von vor zwei Wochen schicken, wenn du mir nicht glaubst. – detly
Sie können so oft wie Sie möchten von einem Zweig zu einem Stamm oder Stamm zu einem Zweig zusammenführen.
Wenn Sie eine Zusammenführung durchführen, geben Sie das Ziel an. Sie können die Unterschiede von TreeA und TreeB zu TreeC zusammenführen, wenn Sie möchten. Wie Chris impliziert, macht deine Frage nicht wirklich viel Sinn. Wenn Sie Ihren Zweig in den Stamm zusammenführen, bleibt der Zweig unberührt. Wenn die Verzweigung anschließend nicht benötigt wird, können Sie sie löschen.
Sie können weiter auf dem Zweig entwickeln, die Funktion, die Sie benötigen, ist merge-tracking, die in Subversion 1.5 ist, das bedeutet, dass zusätzliche Zusammenführungen aus der Branche nur neue Änderungen enthalten.
Wie jeder schon gesagt hat: die Filiale ist nicht tot und die Zusage in die Filiale kann gut weitergehen.
Manchmal obwohl Sie den Zweig nach der Zusammenführung töten möchten. Die einzige zuverlässige Lösung ist das Löschen der Verzweigung. Der Nachteil ist, dass es dann schwieriger ist, den Zweig wieder zu finden, wenn man ihn aus historischen Gründen betrachten möchte. So verlassen viele Menschen die "wichtigen" Zweige und haben eine Vereinbarung, sie nicht zu ändern. Ich wünschte, es gäbe eine Möglichkeit, eine Zweigstelle tot/readonly zu markieren, so dass sich niemand bis auf weiteres darauf festlegen kann.
svn mv ^/Zweige/foo ^/Zweige/.dead/foo –
Einige Hinweise zum Zusammenführen der Änderungen, wenn jemand Änderungen an der Verzweigung mehrfach vornimmt (vor 1.5): Erinnern Sie sich, bei welcher Revision Sie die Zusammenführung durchgeführt haben! Entweder schreiben Sie die Versionsnummern irgendwo, oder (was einfacher ist) machen Sie ein Tag. (Sie können es natürlich finden später heraus, aber das ist ein PITA.)
Beispiel:
Sie haben ein Repository Layout wie folgt aus:
/your_project
/trunk
/branches
/tags
Lassen Sie uns sagen, dass es eine Web-Anwendung ist, und Sie haben geplant, eine Veröffentlichung zu machen. Sie würden einen Tag, und von diesen (oder vom Stamm) schaffen eine Niederlassung in dem Sie die Fehlerbehebung tun:
/your_project
/trunk
/branches
/1.0.0-bugfixes
/tags
/1.0.0
es auf diese Weise tun, können Sie die neuen Funktionen in dem Kofferraum integrieren. Alle Bugfixes würden nur innerhalb des Bugfix-Zweiges passieren und vor jedem Release machen Sie ein Tag der aktuellen Version (jetzt aus dem Bugfix-Zweig).
Nehmen wir an, Sie eine angemessene Menge von Bugfixing tat und freigegeben diejenigen auf dem Produktionsserver 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 jetzt nur die Änderungen zwischen 1.0 integrieren. 0 und 1.0.2 in Ihrem Kofferraum (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 .
Dies ist, was Sie sich merken sollten. Sie haben die Änderungen zwischen 1.0.0 und 1.0.2 bereits auf dem Stamm zusammengefasst. 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 des Fehlerbehebungen fehlen noch:
svn merge http://rep/your_project/tag/1.0.2 http://rep/your_project/tag/1.0.4 .
Jetzt Sie haben alle Änderungen an Ihrem Stamm verschmolzen, und Sie können Ihre Freigabe (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
Nachdem Sie von einem Zweig in den Stamm zu reintegrieren, sollten Sie eines von zwei Dingen tun:
Delete your branch. Dies ist am einfachsten, aber es macht es schwieriger, die Geschichte der Branche zu sehen.
Tell your branch not to merge the reintegrate commit. Wenn Sie in den Stammbereich zurückkehren 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 andere Änderungen als die Zusammenführung selbst vorgenommen haben. Alle anderen Änderungen werden es nie wieder in Ihre Filiale schaffen.
Eigentlich benötigen Sie einen --record-only
merge vom Stamm in Ihrer Filiale der Revision zu tun, die von der --reintegrate
begehen erstellt wurde:
$ 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 glücklich, den Zweig jetzt zu halten
Weitere Informationen sind ich n Chapter 4. Branching and Merging, Advanced Merging.
Die Antwort ist veraltet. – bahrep
Als Erstes 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 behoben. Beginnend mit SVN 1.8, --reintegrate
Option wurde veraltet. Reintegrame Merges werden jetzt automatisch durchgeführt. Siehe Subversion 1.8 Release Notes entry related to the improvement.
lesen SVNBook 1.8 | Reintegrating a branch:
Wenn Sie nicht Ihre Niederlassung zu löschen, nachdem sie dem Stamm reintegrieren Sie können weiterhin sync aus dem Stamm übergeht auszuführen und dann den Zweig wieder reintegrieren. Wenn Sie dies tun, werden nur die Änderungen, die am Ihres Zweiges nach der ersten Reintegration vorgenommen wurden, mit dem Trunk zusammengeführt.
...
Nur Subversion 1.8 unterstützt diese Wiederverwendung eines Zweiges. Frühere Versionen erfordern einige spezielle Handhabung, bevor ein Feature-Zweig mehr als einmal reintegriert werden kann. Siehe die frühere Version dieses Kapitels für weitere Informationen: http://svnbook.red-bean.com/en/1.7/svn.branchmerge.basicmerging.html#svn.branchemerge.basicmerging.reintegrate
Ich denke, dass Sie die akzeptierte Antwort revidieren sollten, weil es nicht mehr wahr ist. Das Problem existiert nicht in modernen Subversion-Clients. – bahrep