GNU diff3 (Drei-Wege-Merge) verursacht unerwartetes Ergebnis
Frage
Es sei angenommen, dass die Dateien meine und deine Nachkommen von OLD.
FILE_MINE =
abc def ghi
FILE_OLD =
abc jkl ghi
FILE_YOURS =
abc def ghi
Befehl diff3 -m MIND OLD YOURS
gibt:
abc <<<<<<< OLD jkl ======= def >>>>>>> YOURS ghi
diff3 nicht lösen kann, dass meine und deine identische Änderungen vorgenommen.
Warum? Und gibt es eine Möglichkeit, dieses Problem zu lösen?
Tickle Ihr Gehirn mit diesem:
diff OLD MIND
und diff OLD YOURS
haben identische große Stücke in ihrer Ausgabe.
2c2 < jkl --- > def
Falls diese großen Stücke nicht "cancel-out" während des Drei-Wege-Merge?
Lösung
Was haben Sie erwartet zu haben?
Als Artikel beschreibt diff3 sagt:
... Diese (Verschmelzung) nicht wahr sein , wenn alle drei Eingabedateien unterscheiden oder , wenn nur ältere unterscheidet ; wir nennen dies eine Konflikt . Wenn alle drei Eingabedateien unterscheiden, nennen wir den Konflikt ein Überlappung
Daher ist der Fall, dass Sie beschrieben haben, ist als Konflikt behandelt. ‚Warum?‘ Sie könnten fragen. Wegen des diff3 Algorithmus. Beschreibung Sie auf der gleichen Seite finden:
Sie können daran denken (Verschmelzung) als Subtraktion älter von Ihr und Addieren des Ergebnisses zu mein , oder wie in meine Zusammenführung der Änderungen, die würde sich älter in Ihr
Es kann nicht richtig Unterschiede lösen, weil es keinen richtigen Kontext von Veränderungen hat gemacht werden.
würde ich Ihnen zustimmen, wenn Sie gehen zu sagen, dass es funktionieren sollte einen anderen Ansatz. Aber ... es ist was es ist. diff3 ist nicht perfekt, ich würde mit anderen Tool empfehlen, wenn Sie es richtig, wie beschrieben in den Artikeln tun mögen