Füge einen Zweig in Trunk zusammen

125

Ich habe ein besonderes Problem mit SVN merge. Ich möchte von einem Entwicklungszweig zu einem Stamm zusammengeführt werden. Wir haben mehrere Entwicklerzweige gleichzeitig vom Stamm abgeschnitten.

Ich füge einen dieser Zweige mit diesem Befehl zum Trunk zusammen:

svn merge trunk branch_1

Ich sehe Änderungen, die nicht Teil dieses Zweigs sind und in Trunk zusammengeführt werden. Was mache ich falsch ?

SVN-Version:

Subversion-Befehlszeilenclient, Version 1.6.16-SlikSvn-tag-1.6.16@1076804-WIN32.

Vanchinathan Chandrasekaran
quelle
7
Ich weiß, dass dies keine Antwort ist, aber wenn Sie mehrere aktive Zweige gleichzeitig haben, sollten Sie wahrscheinlich besser zu mercurial oder git wechseln. Ps: Ich bin kein Fanatiker, ich arbeite seit ~ 7 Jahren mit svn
;-)
2
Welchen Vorteil bietet es? Warum ist es besser, zu Git oder Mercurial zu wechseln?
Vanchinathan Chandrasekaran
3
weil git und mercurial die Zweige viel besser unterstützen. Vorteile: Sie werden solche Fragen nicht stellen und weniger Probleme beim Erstellen und Verwalten von Zweigen haben (derzeit arbeite ich in einem Projekt mit> 1000 Zweigen, in SVN war es eine Hölle, mit ihnen zu arbeiten)
zerkms
Ich empfehle, in Svnmerge.py nachzuschauen und diesen Artikel zu lesen .
Chown

Antworten:

215

Ihre svn mergeSyntax ist falsch.

Sie möchten eine Arbeitskopie von auschecken trunk und dann die folgende svn merge --reintegrateOption verwenden:

$ pwd
/home/user/project-trunk

$ svn update  # (make sure the working copy is up to date)
At revision <N>.

$ svn merge --reintegrate ^/project/branches/branch_1
--- Merging differences between repository URLs into '.':
U    foo.c
U    bar.c
 U   .

$ # build, test, verify, ...

$ svn commit -m "Merge branch_1 back into trunk!"
Sending        .
Sending        foo.c
Sending        bar.c
Transmitting file data ..
Committed revision <N+1>.

Weitere Informationen finden Sie im SVN-Buchkapitel zum Zusammenführen .


Beachten Sie, dass dies zum Zeitpunkt des Schreibens die richtige Antwort war (und akzeptiert wurde), aber die Dinge haben sich weiterentwickelt. Siehe die Antwort von topek und http://subversion.apache.org/docs/release-notes/1.8.html#auto-reintegrate

blahdiblah
quelle
4
- Reintegrate Option ist nicht obligatorisch, Zweig (in 1.6) kann mit einem beliebigen Ziel beliebig oft zusammengeführt werden
Lazy Badger
1
"Ja wirklich?" Ohne das Risiko einzugehen, dieselben Änderungssätze erneut zusammenzuführen? Können Sie bitte einen Link zu bestätigenden Beweisen dafür bereitstellen?
Neutrino
--reintegrateist in der Tat nicht obligatorisch, wird aber in diesem Fall wirklich empfohlen. Ich habe versucht, darauf zu verzichten, --reintegrateund bin zu Hunderten von Konflikten gekommen. Mit --reintegrate, keine Konflikte und alles war gut!
Tibo
17
Die --reintegrateOption ist einfach und effektiv, ABER es muss beachtet werden, dass "Sobald eine --reintegrateZusammenführung von Zweig zu Stamm durchgeführt wurde, der Zweig nicht mehr für weitere Arbeiten verwendet werden kann. Er kann neue Stammänderungen nicht korrekt absorbieren und kann auch nicht ordnungsgemäß wieder integriert werden." wieder zu Kofferraum. " wie in dem Buch erklärt, das Sie verlinkt haben.
Pino
3
@daveL, Forward Merges von Trunk zu Branch machen für mich Sinn. Ich habe jedoch eine erweiterte Funktion gefunden, um "einen reitegrierten Zweig am Leben zu erhalten" (siehe stackoverflow.com/a/10163059/685806 ). Außerdem wird sie von neueren Clientversionen automatisch angewendet.
Pino
78

Wenn Ihr Arbeitsverzeichnis auf den Trunk verweist, sollten Sie in der Lage sein, Ihren Zweig zusammenzuführen mit:

svn merge https://HOST/repository/branches/branch_1

Stellen Sie sicher, dass Sie diesen Befehl im Stammverzeichnis Ihres Trunks ausgeben

topek
quelle
7
Ab SVN 1.8. Das ist die richtige Antwort. Siehe subversion.apache.org/docs/release-notes/…
GreenAsJade
@blahdiblah Das Code-Snippet enthält viele irrelevante Informationen. Es gibt einen Grund, warum die Zusammenfassung von Studien mehr als jeder andere Teil einer Studie um Größenordnungen gelesen wird. Das Gleiche gilt für UX-Tests, das Minimieren von Absprungraten usw. Es ist alles das gleiche Prinzip.
Ahnbizcad
Mit 1.7 können Sie ohne die Option --reintegrate zusammenführen und sich im Zweig weiterentwickeln und weiter zusammenführen. Leider wird 1.8 eine Wiedereingliederung erzwingen, und es scheint keinen Weg zu geben, dies zu verhindern. Dies bedeutet, sobald Sie zusammenführen, können Sie den Zweig nicht mehr verwenden, ohne den gefürchteten "Keep-Alive-Tanz" zu durchlaufen
John Little
3
Vergessen Sie nicht, die Arbeitskopie des Trunks nach dem Zusammenführen wieder in das Repository zu übertragen!
John
16

Führen Sie ein SVN-Update im Trunk durch und notieren Sie sich die Versionsnummer.

Aus dem Kofferraum:

svn merge -r<revision where branch was cut>:<revision of trunk> svn://path/to/branch/branchName

Sie können überprüfen, wo der Zweig aus dem Stamm herausgeschnitten wurde, indem Sie ein SVN-Protokoll erstellen

svn log --stop-on-copy
Mike K.
quelle
Da es mehrere Entwicklungszweige gibt, die gleichzeitig aktiv sind, funktionierte dies auch bei mir nicht. Dieser Befehl hat auch Änderungen von anderen Zweigen übernommen. Möglicherweise ist dies ein Problem mit dem SLik SVN-Client?
Vanchinathan Chandrasekaran
Dies ist zwar nicht ungenau, es gibt jedoch einfachere Möglichkeiten zum Zusammenführen mit neueren Versionen von svn(z. B. der von OP verwendeten).
Blahdiblah
@VanchinathanChandrasekaran, im Befehl geben Sie den Zweignamen an, da svn://path/to/branch/branchNamenur die Änderungen aus diesem Zweig und nicht aus anderen Zweigen abgerufen werden sollen. Wenn ja, sind wir in Gefahr!
Fredrick Gauss
1

Die Syntax ist falsch, es sollte stattdessen sein

svn merge <what(the range)> <from(your dev branch)> <to(trunk/trunk local copy)>
lwpro2
quelle