webentwicklung-frage-antwort-db.com.de

Leerraum in der Ausgabe von git-diff einfärben

In Bezug auf die Code-Formatierung bin ich ein bisschen puristisch :). Ich entferne sehr oft unnötige Leerzeichen (Zeilen mit nur ws, ws am Zeilenende usw.). Ich habe sogar vim gesetzt, um diese Art von Linien zu zeigen, die rot gefärbt sind.

Mein Problem ist, dass ich mit git-diff oft so etwas sehe:

-      else{ 
+      else{

Selbst wenn ich git-diff gefärbt habe, kann ich keinen Unterschied erkennen (in dieser speziellen Situation habe ich 1 ws am Zeilenende entfernt). Gibt es eine Möglichkeit, git-diff anzuweisen, dass ws rot gefärbt ist? (Zum Beispiel diejenigen, die mit/\ s + $/regexp übereinstimmen).

140
radarek

Möglicherweise müssen Sie die Konfigurationseinstellung color.diff.whitespace festlegen, z. mit:

 git config color.diff.whitespace "red reverse"

(Ich gehe davon aus, dass Sie bereits color.diff Oder color.ui Auf auto gesetzt haben, da Sie sagen, dass Sie ohnehin farbige Flecken von git diff Sehen.)

Wenn Sie die Art der rot hervorgehobenen Whitespace-Fehler optimieren möchten, können Sie core.whitespace Ändern, aber blank-at-eol Ist standardmäßig aktiviert, sodass Sie dies wahrscheinlich nicht ändern müssen das von Ihnen erwähnte Beispiel.

Eine mögliche Ursache für Verwirrung ist, dass in der Ausgabe von git diff Leerzeichenfehler nur in den eingeführten Zeilen hervorgehoben werden, nicht in den Zeilen, die entfernt wurden. ( Update: Wie Paul Whittaker in seiner Antwort hervorhebt, über die Sie abstimmen sollten :), können Sie diese sehen durch Umkehren des Diff-Sinns mit git diff -R.)

Weitere Dokumentation zu diesen Konfigurationsoptionen finden Sie in der git config man page

Wenn Sie den Kludge -R Nicht verwenden möchten, können Sie die Option WhiteSpace Error Highlight von diff man Seite .

--ws-error-highlight =

Markieren Sie Whitespace-Fehler in Zeilen, die in der in color.diff.whitespace angegebenen Farbe angegeben sind. ist eine durch Kommas getrennte Liste alter, neuer Kontexte. Wenn diese Option nicht angegeben ist, werden nur Leerzeichenfehler in neuen Zeilen hervorgehoben. Z.B. --ws-error-highlight = neu, alt hebt Leerzeichenfehler sowohl in gelöschten als auch in hinzugefügten Zeilen hervor. Alle können als Abkürzung für alten, neuen Kontext verwendet werden.

git diff --ws-error-highlight=new,old <file>

oder

git diff --ws-error-highlight=all <file>

Ich kenne keine Möglichkeit, dies dauerhaft zu aktivieren und in der Konfiguration zu speichern, abgesehen von der Verwendung eines Alias:

git config alias.df 'diff --ws-error-highlight=all'

Jetzt können Sie verwenden:

git df <file>

Um die Änderungen in rot zu sehen.

Beachten Sie, dass mit Git 2.11 (Q4 2016) dieser Alias ​​möglicherweise ersetzt wird durch:

git config diff.wsErrorHighlight all

Siehe doc on git diff und on git config .

159
Mark Longair

Verwenden git diff -R, um entfernte Zeilen in hinzugefügte Zeilen umzuwandeln. Dann wird das nachfolgende Leerzeichen hervorgehoben.

(Dies setzt voraus, dass Sie die Whitespace-Hervorhebung gemäß den Farbeinstellungen von Marks Antwort bereits aktiviert haben. Die Gutschrift für diese Methode geht an Junios Beitrag unter http://git.661346.n2.nabble.com/Highlighting-whitespace-). On-Removal-with-Git-Diff-td5653205.html .)

Wenn Sie beispielsweise eine Datei von DOS-Zeilenenden nach Unix konvertieren, wird git diff -R zeigt mir deutlich das ^M Zeichen (dis) am Zeilenende. Ohne -R (und auch ohne -w etc.) zeigt an, dass sich die gesamte Datei geändert hat, zeigt aber nicht wie.

128
Paul Whittaker

Verwenden git diff --color | less -R. Das -R macht die Farbkontrollcodes benutzerfreundlich.

Dann können Sie die Suche nach regulären Ausdrücken von less verwenden, z.

/[[:space:]]+$
9
Kelvin

Meine Version von git diff scheint das schon zu tun - ich habe git 1.7.4.1 und set color.ui = auto.

1
nickgrim