git diff - pokaż mi zmiany końca linii?

85

Mój edytor zmienia zakończenia wierszy moich plików źródłowych. Kiedy to robię git diff, widzę tę samą linię dwa razy - raz z, -raz z +- bez widocznej różnicy.

Jak mogę git diffpokazać mi, na czym właściwie polegała ta zmiana?

Stonky
źródło
Prawie duplikat tego (również wspomnianego poniżej): moim ulubionym jestgit config diff.wsErrorHighlight all
Joshua Goldberg,

Odpowiedzi:

64

Najpierw upewnij się, że używasz kolorowego wyjścia (np. With git diff --color) i że włączyłeś podświetlanie białych znaków za pomocą (np.)

git config color.diff.whitespace "red reverse"

Może to jednak nie działać we wszystkich przypadkach, ponieważ gitnie wydaje się, aby podświetlać końcowe białe znaki dla usuniętych wierszy. Aby zobaczyć usunięte spacje, po prostu użyj

git diff -R

aby umieścić spację po „dodanej” stronie porównania, gdzie zostanie ona podświetlona.

Aby uzyskać więcej szczegółów, zobacz odpowiedzi na to pytanie SO .

Paul Whittaker
źródło
Mam git w wersji 2.1.4 i postępowałem zgodnie z sugestią polecenia git config. Ale git diff nadal nie pokazuje żadnej różnicy. Jeśli wyślę git diff do hexdump -C, nic tam nie będzie pokazywane: 000000f0 2d 2d 7d 0a 2b 2b 7d 0a |--}.++}.|7d to nawias klamrowy '}'.
Cardiff Space Man
37

Możesz zobaczyć różnicę w zakończeniu linii za pomocą następującego polecenia.

git diff | cat -v

Następnie wypisywane jest „^ M” jako zakończenie CRLF (DOS), nic dla zakończenia LF (Unix).

Najwyraźniej git diff robi właściwą rzecz, wypisując znaki CR i LF dla zakończenia CRLF. Ale ponieważ CR jest konsumowana przez konsolę, nie możemy tego zobaczyć. Używając cat -v, możemy uczynić go widocznym.

droid7c2
źródło
innym podobnym podejściem jest to git diff > somediff && vi somediff, że vim pokazuje CRLF również jako ^ M. ale cat -vjest schludny.
Nick X
1
+1 nie tylko za to, że po 20 latach używania go catnauczyłem się opcji, o której nie byłem świadomy. :-)
Harald
24

Jednym ze sposobów zobaczenia zmian białych znaków jest wykonanie „różnicowania słów” znak po znaku

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

Podświetla to wszystkie zmiany spacji wszędzie w wierszach . Usunięto odstępy owinięta [-i -]i dodano odstępy w {+i +}.

Alternatywnie, jak zasugerował Alex

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

podświetla wszystkie zmiany spacji na końcach wierszy .

ntc2
źródło
12
git diff --ws-error-highlight=new,old

podświetla różnice z białych znaków w zmienionych wierszach.

Alex
źródło
Jakiej wersji git używasz? git 2.1.4 w moim systemie mówi --ws-error-highlight = new, old to nieprawidłowa opcja.
Cardiff Space Man
Ta opcja została dodana w 2015 roku w git 2.5.0.
MiniGod
5

Graficzne narzędzie porównywania lepiej pokaże zmianę - spróbuj git difftool.

Użyj połączenia i ustaw preferencje, aby wyświetlać spacje. (Edycja -> Preferencje -> Pokaż odstępy.)

Inne narzędzia graficzne prawdopodobnie mają podobne opcje - odpowiedź @ Cotton + komentarz mówi ci, jak to zrobić z vimdiff.

bstpierre
źródło
Graficzne narzędzie porównujące może być niedostępne. Odpowiedź @ paul-whittaker będzie działać w kontekście wynikającym z pytania (jakiś terminal).
od
Teraz to jest dziwne, ale git difftool --tool=meld doesn'tnawet uruchom meldunek. Nie wiem, czy to dlatego, że rebase jest w toku, czy nie.
Cardiff Space Man