Angenommen, ich habe zwei Dateien. Der erste hat den Inhalt:
line 1
foo
line 2
line 1
bar
line 2
Und der zweite hat einen neuen Abschnitt in der Mitte eingefügt, so sieht es aus:
line 1
foo
line 2
line 1
new text
line 2
line 1
bar
line 2
Wenn ich jetzt ein "diff -u" mache, bekomme ich folgende Ausgabe:
--- file1 2013-06-25 16:27:43.170231844 -0500
+++ file2 2013-06-25 16:27:59.218757056 -0500
@@ -1,7 +1,11 @@
line 1
foo
line 2
line 1
+new text
+line 2
+
+line 1
bar
line 2
Dies spiegelt nicht richtig wider, dass die mittlere Zeilengruppe eingefügt wurde. Stattdessen sieht es so aus, als ob die zweite Zeilengruppe geändert und am Ende eine neue hinzugefügt wurde (dies liegt daran, dass der Algorithmus in der ersten abweichenden Zeile beginnt).
Gibt es eine Möglichkeit, diff (entweder für sich oder mithilfe von git diff) zu erhalten, um stattdessen diese Ausgabe anzuzeigen?
--- file1 2013-06-25 16:27:43.170231844 -0500
+++ file2 2013-06-25 16:27:59.218757056 -0500
@@ -1,7 +1,11 @@
line 1
foo
line 2
+
+line 1
+new text
+line 2
line 1
bar
line 2
Dies ist meistens ein Problem beim Generieren eines Patches für eine Überprüfung, bei dem eine neue Funktion in eine Gruppe ähnlicher Funktionen eingefügt wird. Das Standardverhalten spiegelt nicht wider, was sich wirklich geändert hat.
sdiff file1 file2
vielleicht, dass dies das ist, wonach Sie suchen.--unified 5
oder größere Werte?Antworten:
Git 2.9 wurde Anfang dieses Jahres veröffentlicht und enthielt die experimentelle Flagge
--compaction-heuristic
auf demgit diff
Befehl:Ich glaube nicht, dass GitHub es für Unterschiede in der Web-Benutzeroberfläche für Pull-Anfragen und Vergleiche aktiviert hat, aber Sie können es lokal tun. Ich würde empfehlen, es in Verbindung mit zu verwenden,
--word-diff
wenn Sie diese Granularität benötigen.Weitere Details finden Sie im GitHub-Blog: https://github.com/blog/2188-git-2-9-has-been-released
quelle
Der Geduld-Diff-Algorithmus (
git diff --patience
) liefert möglicherweise natürlichere Ergebnisse, wenn auch nicht in allen Fällen.quelle
In bestimmten Fällen kann der Befehl
git diff --word-diff
(oder --color-words) zu besser aussehenden Ergebnissen führenquelle