2009-04-20 6 views
94

Beim Zusammenführen einiger Zweige (unter Verwendung von SVN 1.6.1), wo eine Datei in beiden Zweigen hinzugefügt wurde (und dann in diesen separaten Zweigen bearbeitet wurde) ist einer der neuen Baum Konflikte bekommen:SVN, wie man neue Baumkonflikte auflöst, wenn Datei auf zwei Zweigen hinzugefügt wird

 C foo.txt 
    > local obstruction, incoming add upon merge 

ich die Änderungen von beiden Zweigen muß, aber der Baum Konflikt gibt mir nicht die üblichen .working, .merge links & .merge-rechts-Dateien - - was aufgrund der Art des Konflikts verständlich ist. Es gibt einige dieser Konflikte, und solche, bei denen in jedem Zweig ein Löschen der gleichen Datei aufgetreten ist, die jedoch einfach zu lösen sind.

Wie kann ich dieses Problem beheben? Das SVN-Redbean-Buch (für 1.6) deckt diese Situation nicht ab.

Antwort

39

Wie in einer älteren Version (2009) des "Tree Conflict" design Dokument erwähnt:

XFAIL Konflikt von merge versionierter

Dieser Test-Datei hinzufügen, übernimmt eine Zusammenführung, die eine Datei zusätzlich bringt ohne Geschichte auf eine bestehende versionierte Datei.
Dies sollte ein Baumkonflikt in der Datei 'local obstruction, incoming add upon merge' sein. Feste Erwartungen in r35341.

(Dies auch genannt wird „böse Zwillinge“ in Clearcase by the way): verschiedenen Zweigen, die Schaffung von zwei verschiedenen Geschichten für zwei verschiedene Elemente zweimal in zwei
eine Datei erstellt (hier „hinzugefügt“ zweimal), aber mit dem gleichen Namen.

Die theoretische Lösung besteht darin, diese Dateien (mit einem externen Diff-Tool) im Zielzweig 'B2' manuell zusammenzuführen.

Wenn Sie noch auf dem Source-Zweig arbeiten, wäre das ideale Szenario, dass die Datei von der Quelle Zweig zu entfernen zu B1, fusioniert B2-B1, um wieder sichtbar auf B1 diese Datei zu machen (Sie werden dann arbeiten das gleiche Element).
Wenn eine Zusammenführung nicht möglich ist, da die Zusammenführung nur von B1 bis B2 erfolgt, ist eine manuelle Zusammenführung für jede B1->B2 Zusammenführung erforderlich.

+11

Aber wie machen Sie eine manuelle Zusammenführung ohne die .merge- * Dateien? – Quantum7

+2

Der "Baumkonflikt" Design-Dokument ist Link verrottet :( – whitey04

+2

Die lustige Sache ist, dass, selbst wenn beide Dateien _identital_ hinzugefügt werden sie immer noch als Konflikt angezeigt. Dies sollte wirklich nicht als Konflikt markiert werden. – SantiBailors

158

Ich fand eine post suggesting a solution for that. Es wird ausgeführt:

svn resolve --accept working <YourPath> 

, die die lokalen Versionsdateien als OK beanspruchen.
Sie können es für einzelne Dateien oder ganze Projektkataloge ausführen.

+2

Danke, das löst auch: C foo.txt > lokal hinzufügen, eingehende hinzufügen nach update – lazysoundsystem

+5

danke es funktionierte für mich auch, aber ich musste dies tun: svn resolve --accept working FILENAME – ajacian81

+5

yeah Sie brauchen einen Dateinamen. Er akzeptiert '.' (das aktuelle Verzeichnis). Ich musste das auch rekursiv tun: "svn resolve --accept working --recursive." löst alles auf Gefallen an Ihrer Arbeitskopie (gefährlich! Sie können die Änderungen anderer Menschen wegblasen, wenn Sie dies tun, wie immer bei der Konfliktlösung) –

9

Was ist, wenn die eingehenden Änderungen die gewünschten sind? Ich bin nicht in der Lage svn lösen --accept ihre voll

svn resolve --accept Basis

+4

Ich denke, ich habe die Frage missverstanden. "base" ist in der Tat gleichbedeutend mit "ihre volle", wenn Sie "svn resolve" verwenden, aber es löst Ihr Problem nicht. Was ich stattdessen tat, war, es in zwei Teile zu teilen: 1) Lösche mein lokales in Konflikt stehendes Verzeichnis (oder Datei), 2) Merge. Dies sollte ohne Konflikte ausgeführt werden, und da "die eingehenden Änderungen die gewünschten sind", würde ich die gelöschten Elemente nicht interessieren –

1

ich gerade geschafft zu laufen, mich ziemlich gründlich zu zwängen versucht user619330 Rat oben zu folgen.Die Situation war: (1): Ich hatte einige Dateien hinzugefügt, während ich an meiner ersten Verzweigung, Branch1, arbeitete; (2) Ich habe einen neuen Branch erstellt, Branch2 für die weitere Entwicklung, verzweige ihn vom Stamm und füge dann meine Änderungen von Branch1 ein (3) Ein Kollege hat meine Mods von Branch1 in seinen eigenen Zweig kopiert, weitere Mods hinzugefügt, und dann wieder mit dem Stamm verbunden; (4) Ich wollte nun die letzten Änderungen von trunk in meinen aktuellen Arbeitszweig, branch2, einbinden. Dies ist mit svn 1.6.17.

Die Zusammenführung hatte Baumkonflikte mit den neuen Dateien, und ich wollte die neue Version aus dem Stamm, wo sie sich unterschieden, so von einer sauberen Kopie von Branch2, habe ich ein Svn Löschen der Konfliktdateien, verpflichtet diese Branch2 Änderungen (So erstellen Sie eine temporäre Version von "branch2" ohne die fraglichen Dateien), und dann habe ich meine Verbindung aus dem Trunk. Ich habe das getan, weil ich wollte, dass der Verlauf mit der Stammversion übereinstimmt, so dass ich später keine Probleme mehr haben würde, wenn ich versuche, wieder mit dem Stamm zu verbinden. Merge ging gut, ich bekam die Stammversion der Dateien, svn st zeigt alles in Ordnung, und dann traf ich weitere Baumkonflikte, während ich versuchte, die Änderungen zwischen dem Löschen, das ich zuvor gemacht hatte, und dem Hinzufügen aus der Zusammenführung zu begehen. Habe eine SVN-Lösung der Konflikte zugunsten meiner Arbeitskopie (die nun die Stammversion der Dateien hatte), und habe sie begehen lassen. Alles sollte gut sein, oder?

Nun, nein. Ein Update einer anderen Kopie von branch2 führte zu der alten Version der Dateien (Pre-Trunk Merge). So, jetzt habe ich zwei verschiedene Arbeitskopien von Branch2, angeblich auf die gleiche Version aktualisiert, mit zwei verschiedenen Versionen der Dateien, und beide bestehen darauf, dass sie auf dem neuesten Stand sind! Das Auschecken einer sauberen Kopie von branch2 führte zu der alten (Pre-Trunk) Version der Dateien. Ich manuell diese auf die Stammversion aktualisieren und die Änderungen festschreiben, gehen Sie zurück zu meiner ersten Arbeitskopie (von der ich die Stammänderungen ursprünglich eingereicht hatte), versuchen Sie es zu aktualisieren, und jetzt einen Prüfsummenfehler für die fraglichen Dateien. Schlag das fragliche Verzeichnis weg, hol dir eine neue Version per Update, und endlich habe ich eine gute Version von branch2 mit den Trunk-Änderungen. Ich hoffe. Vorbehalt Entwickler.

Verwandte Themen