Warum nicht svn merge --ignore-ancestry Arbeit zweimal in diesem Szenario, wenn Sie svn diff+patch?
Ich versuche, Sie zu ersetzen meinen svn Zusammenführung von workflow — und das ist in der Regel svn diff
manchmal einige manuelle editieren der patch, und dann patch
— mit tatsächlichen svn merge
. Aber ich sehe einige unerwartete Verhalten, und ich kann nicht finden eine Erklärung in einem der SVN-Dokumentation on-line. Hier ist mein Szenario:
- Neues repository (rev. 0)
- Erstellt eine leere Datei namens
file
im Kofferraum (rev. 1) - Kopiert trunk, branches/branch1 (rev. 2)
- In den Filialen/branch1, geändert
file
zu Lesen, "abcdefg" und engagierte (rev. 3) - Zurück in den Kofferraum ran:
svn merge -c3 ^/branches/branch1 . --ignore-ancestry
So weit, So gut. file
im trunk enthält "abcdefg". Und Kofferraum nicht aktualisiert werden mit allen Metadaten, da habe ich --ignore-ancestry. Um zu überprüfen, führe ich:
svn pg svn:mergeinfo .
welche druckt nichts. Toll. Also ich will jetzt übernehmen Sie die änderung in r3 wieder. Also ich ausführen:
svn merge -c3 ^/branches/branch1 . --ignore-ancestry
Dieser Befehl nicht nichts. Druckt keine Ausgabe, nicht ändern file
, und fügt keine Metadaten. Wenn ich das gleiche mit meinem alten diff-und patch-workflow, wie diese:
svn diff -c3 ^/branches/branch1 | patch
Dann Datei wird aktualisiert, mit der sich auch wieder ändern. Und seit der änderung Betrug nur:
--- file (revision 2)
+++ file (revision 3)
@@ -0,0 +1 @@
+abcdefg
Anwendung wieder, macht einfach file
enthalten zwei Zeilen von "abcdefg", wie beabsichtigt.
~~~
Ich weiß, das sollte nicht sein, einen gemeinsamen workflow, aber ich fühle mich wie ich brauche, um zu verstehen, was svn merge
ist eigentlich in Situationen wie dieser vor kann ich bequem anzunehmen. (Keine Notwendigkeit Alltag, die Vorteile svn merge
— ich bin schon an Bord.)
Dank!
InformationsquelleAutor mhjacobson | 2012-03-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Merge funktioniert durch den Vergleich der beiden Dateien Zusammenführen und Sie zwingen, sich zu versöhnen, die Unterschiede (und bei der Abstammung ist es oft einfacher ist natürlich, wenn Dateien im Zusammenhang). Wenn die Dateien identisch sind, passiert nichts. Es scheint, dass die Subversion der Auffassung, dass ein Konflikt zwischen "alt-Datei" und "Nachfolger-Datei" wird gewonnen durch den Nachfolger. Auf echten Inhalte mit keine Nachfolge, erhalten Sie, einen Konflikt zu lösen mit einem merge-tool.
--ignore-ancestry
könnte in der Tat ignorieren svn:mergeinfo Eigenschaft, während implizite Pfad basierend Geschichte Informationen, wenn es hilft trivial, die Dokumentation ist nicht explizit zu diesem Punkt.Auf der anderen Seite, können Sie Ihre patch-workflow ist geflossen, und es ist der Grund, warum es verdoppelt den text-Inhalt: in Abwesenheit von Kontext (wenn der Kontext gewünscht patch im unified-format, da ist keiner wirklich in Ihrem Fall), die patcher denkt, es ist eine gute Idee, um den patch installieren, wieder, obwohl der richtige Ansatz ist in der Regel, dass der SubVersion in diesem Fall. Ein anderer patcher tool haben vielleicht bemerkt die Abwesenheit von Kontext und betrachten Sie dies als Notwendigkeit der "start-Datei" /"Ende-der-Datei" Kontext durchgesetzt werden, patch nicht geklappt hätte, dann.
InformationsquelleAutor armel