git diff - zeig mir Änderungen am Zeilenende?

85

Mein Editor ändert die Zeilenenden meiner Quelldateien. Wenn ich das tue git diff, sehe ich dieselbe Linie zweimal - einmal mit -und einmal mit +- ohne sichtbaren Unterschied.

Wie kann ich git diffmir zeigen, was diese Änderung tatsächlich war?

Stonky
quelle
Fast ein Duplikat davon (auch unten erwähnt): Mein Favorit istgit config diff.wsErrorHighlight all
Joshua Goldberg

Antworten:

64

Stellen Sie zunächst sicher, dass Sie die farbige Ausgabe verwenden (z. B. mit git diff --color) und dass Sie die Leerzeichenhervorhebung mit (z. B.) aktiviert haben.

git config color.diff.whitespace "red reverse"

Dies funktioniert jedoch möglicherweise nicht in allen Fällen, da gitdas nachgestellte Leerzeichen für entfernte Zeilen nicht hervorgehoben wird. Verwenden Sie einfach das gelöschte Leerzeichen

git diff -R

um das Leerzeichen auf die 'hinzugefügte' Seite des Vergleichs zu setzen, wo es hervorgehoben wird.

Weitere Einzelheiten finden Sie in den Antworten auf diese SO-Frage .

Paul Whittaker
quelle
Ich habe git Version 2.1.4 und habe auf den Befehlsvorschlag git config reagiert. Aber Git Diff zeigt immer noch keinen Unterschied. Wenn ich git diff nach hexdump -C pfeife, wird dort überhaupt nichts angezeigt: 000000f0 2d 2d 7d 0a 2b 2b 7d 0a |--}.++}.|Die 7d ist die '}' geschweifte Klammer.
Cardiff Space Man
36

Sie können den Unterschied am Zeilenende mit dem folgenden Befehl sehen.

git diff | cat -v

Dann wird "^ M" für das Ende von CRLF (DOS) gedruckt, nichts für das Ende von LF (Unix).

Anscheinend macht git diff das Richtige und druckt CR- und LF-Zeichen für das CRLF-Ende. Da CR jedoch von der Konsole verwendet wird, können wir es nicht sehen. Mit cat -v können wir es sichtbar machen.

droid7c2
quelle
Ein anderer ähnlicher Ansatz ist git diff > somediff && vi somediff, dass vim CRLF auch als ^ M zeigt. aber das cat -vist ordentlich.
Nick X
+1 nicht zuletzt, weil ich nach 20 Jahren eine Option gelernt habe, catdie mir nicht bewusst war. :-)
Harald
24

Eine Möglichkeit, Leerzeichenänderungen zu erkennen, besteht darin, ein zeichenweises "Wortdiff" mit zu erstellen

git diff --color --word-diff-regex=.

Dies hebt alle Leerzeichenänderungen überall in Zeilen hervor . Das entfernte Leerzeichen wird in [-und eingeschlossen -]und das Leerzeichen in {+und hinzugefügt +}.

Alternativ, wie von Alex vorgeschlagen

git diff --color --ws-error-highlight=new,old

markiert alle Änderungen in Leerzeichen an den Enden der Linien .

ntc2
quelle
11
git diff --ws-error-highlight=new,old

hebt Leerzeichenunterschiede in geänderten Zeilen hervor.

Alex
quelle
Welche Version von Git verwenden Sie? Git 2.1.4 auf meinem System sagt --ws-error-Highlight = neu, alt ist eine ungültige Option.
Cardiff Space Man
Diese Option wurde 2015 in Git 2.5.0 hinzugefügt.
MiniGod
5

Ein grafisches Diff-Tool zeigt Ihnen die Änderung besser - versuchen Sie es git difftool.

Verwenden Sie meld und legen Sie die Einstellungen fest, um Leerzeichen anzuzeigen. (Bearbeiten -> Einstellungen -> Leerzeichen anzeigen.)

Andere grafische Tools haben wahrscheinlich ähnliche Optionen - @ Cottons Antwort + Kommentar zeigt Ihnen, wie Sie dies mit vimdiff tun.

bstpierre
quelle
Ein grafisches Diff-Tool ist möglicherweise nicht verfügbar. Die Antwort von @ paul-whittaker funktioniert in dem durch die Frage implizierten Kontext (einige Terminals).
Am
Nun, das ist komisch, aber git difftool --tool=meld doesn'tsogar starten verschmelzen. Ich weiß nicht, ob es daran liegt, dass eine Rebase durchgeführt wird oder nicht.
Cardiff Space Man