Patience Diff konzentriert seine Energie stattdessen auf die niederfrequenten Zeilen mit hohem Inhalt, die als Marker oder Signaturen für wichtige Inhalte im Text dienen. Es ist immer noch ein LCS-basiertes Diff im Kern, aber mit einem wichtigen Unterschied, da es nur die längste gemeinsame Teilsequenz der Signaturzeilen berücksichtigt:
Suchen Sie alle Zeilen, die auf beiden Seiten genau einmal vorkommen, und führen Sie dann die längste gemeinsame Teilsequenz auf diesen Zeilen aus, wobei Sie sie aufeinander abstimmen.
Wann sollten Sie verwenden Geduld Unterschied? Laut Bram ist Geduldunterschied gut für diese Situation:
Die wirklich schlimmen Fälle sind solche, in denen zwei Versionen dramatisch voneinander abweichen und der Entwickler nicht darauf achtet, die Patchgrößen unter Kontrolle zu halten. Unter diesen Umständen kann ein Diff-Algorithmus gelegentlich insofern "falsch ausgerichtet" werden, als er lange Abschnitte von geschweiften Klammern miteinander verbindet, aber die lockigen Klammern von Funktionen in einer Version mit den geschweiften Klammern der nächsten späteren Funktion in der anderen Version korreliert. Diese Situation ist sehr hässlich und kann zu einer völlig unbrauchbaren Konfliktdatei führen, wenn solche Dinge am kohärentesten dargestellt werden müssen.
Nach meiner Erfahrung mit XML liefert es genau die gleichen "schlechten" Ergebnisse wie ein normaler Diff.
Stivlo
5
Ich hatte viel mehr Glück mit Geduld mit XML; Sicherlich hat der Diff, den ich gerade betrachte, genau das mit dem regulären Diff-Algorithmus beschriebene Problem der Fehlausrichtung, sieht aber mit Geduld-Diff absolut großartig aus.
Ich fand diesen Blog sehr interessant und lieferte eine gute Erklärung mit weiteren Links zu Algorithmusdetails: fabiensanglard.net/git_code_review/diff.php Ich hoffe, es wird jemandem nützlich sein
--histogram
Parameter, der "... den GeduldalgorithmusAntworten:
Sie können einen Beitrag von Bram Cohen , dem Autor des Geduld-Diff-Algorithmus, lesen , aber ich fand diesen Blog-Beitrag, um den Geduld-Diff-Algorithmus sehr gut zusammenzufassen:
Wann sollten Sie verwenden Geduld Unterschied? Laut Bram ist Geduldunterschied gut für diese Situation:
quelle
Sie können es auch für Zusammenführungen verwenden (hat hier bei einigen XML-Konflikten sehr gut funktioniert):
quelle
git config --global diff.algorithm patience
git merge -X patience
.Der Geduld-Diff-Algorithmus ist ein langsamerer Diff-Algorithmus, der in einigen Fällen bessere Ergebnisse zeigt.
Angenommen, Sie haben die folgende Datei in git eingecheckt:
Jetzt ordnen wir die Abschnitte neu und fügen eine neue Zeile hinzu:
Der Standard-Diff-Algorithmus behauptet, dass sich die Abschnittsüberschriften geändert haben:
Während Geduld diff ein Ergebnis zeigt, das wohl intuitiver ist:
Es gibt hier eine gute Diskussion über die subjektive Diff-Qualität , und Git 2.11 untersucht die Diff-Heuristik weiter .
Beachten Sie, dass der Geduld-Diff-Algorithmus noch einige bekannte pathologische Fälle aufweist .
quelle