2009-08-13 10 views
3

Vor ein paar Wochen habe ich angefangen, eine Änderung im Stamm meines SVN-Repositorys vorzunehmen, von der ich dachte, dass sie nur geringfügig sein würde.So vermeiden Sie SVN-Konflikte beim Zusammenführen der Verzweigung in den Stamm

Nach ein paar Stunden Arbeit, zu realisieren, dass die Änderung größere Auswirkungen hatte, als ich dachte, ich beschlossen, es war zu riskant meine Änderungen in den Kofferraum sofort zu überprüfen, so habe ich einen Zweig, wie folgt aus:

svn copy . https://my_svn_server/svn/blah/branches/my-branch 

... und dann ein Svn-Schalter und glücklich weiter in diesem Zweig arbeiten. So weit, so gut, bis ich an den Punkt komme, an dem ich mit all den Veränderungen zufrieden bin und sie wieder in den Kofferraum zusammenführen möchte. Also checke ich alle Änderungen in meinen Zweig ein und befolge dann sorgfältig das gezeigte Verfahren here ... und hier kam ich in Schwierigkeiten. Da ich my-branch aus dem lokalen (clientseitigen) Repository erstellt habe, in dem bereits eine große Anzahl von (nicht eingecheckten) Änderungen vorhanden war, enthält die Zusammenführung nicht die Diffs, die diesen Änderungen entsprechen, und somit auch dort Es gibt viele und viele Konflikte in der Zusammenführung, die ich manuell lösen muss - etwas, das ich nicht tun will, da es Platz für Fehler lässt, wenn sich Fehler einschleichen.

Ich habe versucht, einschließlich der fehlenden diffs durch Dekrementieren der Revisionsnummer, die ich während der Zusammenführung angeben, z. durch eine

svn merge -r2818:2932 https://my_svn_server/svn/blah/branches/my-branch 

statt der erwarteten

svn merge -r2819:2932 https://my_svn_server/svn/blah/branches/my-branch 
tun

... aber das hat nicht funktioniert, weil mein-Zweig nicht in Revision 2818, gab es und so bekomme ich nur einen Fehler :

svn: Unable to find repository location for 'https://my_svn_server/svn/blah/branches/my-branch' in revision 2818 

Also das ist, wo die Dinge stehen. Ich kann das Chaos dieses Mal manuell aussortieren, aber ich bin neugierig, ob es einen Weg gibt, damit umzugehen, damit es beim nächsten Mal besser für mich läuft.

Eine Möglichkeit, die ich mir vorstellen könnte, wäre, meinen Zweig nicht durch Kopieren des lokalen (clientseitigen) Repository zu erstellen, sondern indem ich eine Kopie des SVN-Stamm-HEAD mache und dann my-branch in einen separaten auschecke Verzeichnis, und kopieren Sie dann manuell meine lokalen (nicht eingecheckten) Änderungen aus dem Stammverzeichnis in das Verzeichnis my-branch und dann den lokalen Stamm direkt zurück ... aber das ist ziemlich mühsam und fehleranfällig.

Sicherlich gibt es eine bessere, automatische Möglichkeit, eine Verzweigung, die lokale (nicht eingecheckte) Änderungen enthält, zu erstellen und später wieder in den Stamm zu integrieren?

Antwort

7

Ihr letzter Vorschlag ist fast da. Wenn Sie verzweigen möchten, kopieren Sie den Stamm HEAD. Dann in Ihrer Arbeitskopie,

svn switch https://my_svn_server/svn/blah/branches/my-branch 

Dies wird Sie in den Zweig wechseln, während Sie alle Ihre lokalen Änderungen beibehalten. Sie können Ihre Änderungen dann jederzeit an die Zweigstelle übergeben.

+0

Cool, ich wusste nicht, svn Schalter würde meine lokalen Änderungen behalten. Das ist die Sache, die ich vermisste: ^) –

+0

Hmm, nun, es wird * versuchen *, deine lokalen Änderungen zu behalten. –

+0

Meine Antwort wurde unter der Annahme gemacht, dass der Stamm HEAD identisch mit dem neuen Zweig HEAD ist. Ich kann nicht garantieren, dass Ihre lokalen Änderungen erfolgreich beibehalten werden, wenn Sie andere Änderungen haben, die im Stamm konfligieren. – bobDevil

1

Okay, ich denke, ich habe herausgefunden, wie man die Zusammenführung sauber macht (lustig wie das Verfassen einer Frage oft das Problem klärt, nicht wahr?). Die Lösung besteht darin, zwei Zusammenführungen durchzuführen, einen für die Unterschiede zwischen dem Hauptzweig (wie er war) und dem Beginn meines Zweigs und dann den zweiten Zusammenschluß, um die nachfolgenden Änderungen in meinem Zweig zu berücksichtigen:

svn merge https://my_svn_server/svn/blah/trunk/[email protected] https://my_svn_server/svnblah/branches/[email protected] 
svn merge -r2819:2932 https://my_svn_server/svn/blah/branches/my-branch 
Verwandte Themen