git diff - показати зміни, що закінчуються рядком?


85

Мій редактор змінює закінчення рядків моїх вихідних файлів. Коли я це роблю git diff, я бачу один і той же рядок двічі - один раз із -і один раз із +- без видимої різниці.

Як мені git diffпоказати, якою насправді була ця зміна?


Майже дублікат цього (також згаданого нижче): мій улюбленийgit config diff.wsErrorHighlight all
Джошуа Голдберг

Відповіді:


64

По-перше, переконайтеся, що ви використовуєте кольоровий вивід (наприклад, з git diff --color) і що ви включили підсвічування пробілів за допомогою (наприклад)

git config color.diff.whitespace "red reverse"

Однак це може працювати не у всіх випадках, оскільки, gitсхоже, не виділяється кінцевий пробіл для видалених рядків. Щоб побачити пробіли, які ви видалили, просто використовуйте

git diff -R

поставити пробіл на "доданій" стороні порівняння, де він і виділяється.

Докладніше див. Відповіді на це запитання SO .


У мене є git версії 2.1.4, і я діяв за пропозицією команди git config. Але git diff все ще не демонструє жодної різниці. Якщо я передаю git diff до hexdump -C, там взагалі нічого не відображається: 000000f0 2d 2d 7d 0a 2b 2b 7d 0a |--}.++}.|7d - це фігурні дужки '}'.
людина з космічного простору Кардіфф

37

Ви можете побачити різницю в закінченні рядка за допомогою наступної команди.

git diff | cat -v

Потім друкується "^ M" для закінчення CRLF (DOS), нічого для закінчення LF (Unix).

Очевидно, git diff робить правильно, друкуючи символи CR та LF для закінчення CRLF. Але оскільки консоль споживається CR, ми її не бачимо. Використовуючи cat -v, ми можемо зробити його видимим.


інший подібний підхід - git diff > somediff && vi somediffvim також показує CRLF як ^ M. але cat -vце акуратно.
Nick X

1
+1 не в останню чергу за те, що дозволив мені навчитися, через 20 років його використання, варіант, про catякий я не знав. :-)
Гаральд

24

Один із способів побачити пробіли - це зробити символьну «різницю в словах»

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

Це підкреслює всі зміни пробілів скрізь у рядках . Вилучені пробільні загортають в [-і -]й додав прогалини в {+і +}.

Як варіант, як запропонував Алекс

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

виділяє всі пробіли в кінцях рядків .



5

Графічний інструмент різниці краще покаже вам зміни - спробуйте git difftool.

Використовуйте meld та встановіть параметри для відображення пробілів. (Редагувати -> Налаштування -> Показати пробіли.)

Інші графічні інструменти, ймовірно, мають подібні варіанти - відповідь @ Cotton відповідь + коментар підказує, як це зробити за допомогою vimdiff.


Інструмент графічної різниці може бути недоступним. Відповідь @ paul-whittaker буде працювати в контексті, на який посилається питання (якийсь термінал).
be15

Зараз це дивно, але git difftool --tool=meld doesn'tнавіть запуск meld. Не знаю, чи це тому, що триває перебазування чи ні.
людина з космічного простору Кардіффа,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.