2010-09-29 7 views
14

Ist das ein hässlicher Subversion Bug oder bin ich auf dem falschen Weg?Subversion: Zusammenführen, Wiederherstellen, erneut zusammenführen. Warum scheitert es still?

Einen Zweig in einen Stamm zusammenführen. -> HelloWorld.txt Updates

Revert HelloWorld.txt

wieder die gleiche merge tun. -> Keine Dateien aktualisieren.

Warum wird die HelloWorld nicht erneut in der zweiten Version aktualisiert? Es verhält sich so, als wäre diese Änderung bereits kopiert worden. Sollte das Zurücksetzen nicht zurückgesetzt werden?

Wenn Sie den gesamten Ordner, in dem HelloWorld ist, zurücksetzen, wird die Änderung durch die zweite Zusammenführung ordnungsgemäß angewendet. Nur wenn Sie eine Datei wiederherstellen, schlägt sie fehl.

Dies ist ein wenig beängstigend. Was ist, wenn ich einige Dateien vorerst zurücksetzen muss? Bei einer zukünftigen Zusammenführung wird der kritische Code nicht kopiert.

Subversion 1.6 OS X 10.6.4

+0

Vielen Dank an alle, die geantwortet haben! – Stephen

+0

Ich würde die gleiche Frage stellen. Bitte beachten Sie, dass dies auch passiert, wenn Sie auf dem Stamm bleiben, in R42 bearbeiten, in R43 zurücksetzen und R42 erneut anwenden möchten. Sie müssen Herkunft ignorieren, sonst wird nichts getan. – rds

Antwort

6

Subversion führt fusionieren Tracking, was bedeutet, es wird aufgezeichnet, welche Revisionen bereits zusammengefasst. Die Zusammenführungsinformationen werden in einer Eigenschaft namens svn:mergeinfo im Stammverzeichnis der Zusammenführung aufgezeichnet (dh, was auch immer Sie als Ziel nach svn merge eingegeben haben). Sie haben die Datei zurückgesetzt, aber wahrscheinlich den Zusammenführungsstammordner, der die geänderte oder hinzugefügte svn:mergeinfo-Eigenschaft enthält, nicht zurückgesetzt.

3

Sanders ist richtig.

Denken Sie nicht, als ob Sie Staaten kopieren. Sie "nehmen" Änderungen und wenden sie erneut auf ein anderes Ziel an (das idealerweise relativ zum Zusammenführungsursprung ist).

Vor svn 1.5 mussten wir die Änderungen beim Zusammenführen manuell verfolgen. „Ähm habe ich r28445 zu r28501 aus diesem Zweig zusammenführen Ich möchte nicht Änderungen erneut anwenden, die ich allready tat: - /“

Es war ein Geduldsspiel-Maschine;)

seit 1.5 svn verfolgt, was Sie tat in der Vergangenheit und wird nur die selbe historische Änderung einmal auf ein einzigartiges Ziel anwenden.

Sie sollten in der Lage sein, diese freundliche Überprüfung zu deaktivieren, indem Sie "--ignore-ancestry" in Ihrem Svn-Zusammenführungsbefehl verwenden. Seien Sie darauf vorbereitet, viele Änderungen zu erhalten, die Sie bereits angewendet haben. Beschränken Sie, was Sie erhalten möchten, indem Sie die Revision angeben.

svn merge --ignore-ancestry -c REVISION_WITH_CHANGE http://mysvn/path/to/mergeorigin 
19

Dieses Verhalten ist in svn Dokumentation Advanced Merging Abschnitt dokumentiert (siehe Anmerkung 23). Wenn Sie Ihre Änderung zuerst zusammenführen, wird die zusammengeführte Revisionsnummer in der svn:mergeinfo-Eigenschaft verfolgt. Wenn Sie Ihre Änderungen rückgängig machen, wird die Revision weiterhin als zusammengeführt markiert, damit Sie sie nicht versehentlich erneut zusammenführen. Tatsache ist, dass, wenn Sie es entfernt, gibt es wenig Chancen, dass Sie es zurück wollen ...

Wenn Sie wirklich wollen es wieder zusammenführen, dann können Sie die --ignore-ancestry Option, die nicht einchecken svn:mergeinfo, wenn die Revision hat wurden zuvor zusammengeführt. Eine andere Lösung ist, diese Revision bewusst von svn:mergeinfo zu entfernen, damit sie in Zukunft wieder zusammengeführt werden kann. Aber tun Sie es nicht von Hand, verwenden Sie dazu die --record-only Option des Befehls svn merge.

+0

Passiert dies und ich bin froh zu verstehen, was "Abstammung ignorieren" bedeutet. Ich wünschte, sie hätten es stattdessen "Mergeinfo ignorieren" genannt! –

+0

Ich würde dir ein Bier bezahlen! – juanmf