git diff - показать изменения окончания строки?

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

Как мне заставить git diff показать мне, в чем на самом деле было это изменение?


person Stonky    schedule 13.10.2010    source источник
comment
Почти дубликат этого (также упомянутого ниже): мой любимый - git config diff.wsErrorHighlight all   -  person Joshua Goldberg    schedule 06.12.2018


Ответы (5)


Во-первых, убедитесь, что вы используете цветной вывод (например, с git diff --color) и что вы включили выделение пробелов с помощью (например)

git config color.diff.whitespace "red reverse"

Однако это может работать не во всех случаях, поскольку git не выделяет конечные пробелы для удаленных строк. Чтобы увидеть удаленные пробелы, просто используйте

git diff -R

чтобы поставить пробел на «добавленной» стороне сравнения, где он будет выделен.

Для получения дополнительных сведений см. Ответы на этот вопрос SO.

person Paul Whittaker    schedule 16.07.2012
comment
У меня git версии 2.1.4, и я действовал в соответствии с предложением команды git config. Но git diff по-прежнему не показывает никакой разницы. Если я перенаправляю git diff на hexdump -C, там вообще ничего не отображается: 000000f0 2d 2d 7d 0a 2b 2b 7d 0a |--}.++}.| 7d - это фигурная скобка '}'. - person cardiff space man; 22.01.2020

Вы можете увидеть разницу в конце строки с помощью следующей команды.

git diff | cat -v

Затем "^ M" печатается для окончания CRLF (DOS), ничего для окончания LF (Unix).

По-видимому, git diff поступает правильно, печатая символы CR и LF для окончания CRLF. Но поскольку CR используется консолью, мы не можем его увидеть. Используя cat -v, мы можем сделать его видимым.

person Kaz    schedule 15.09.2016
comment
другой аналогичный подход - git diff > somediff && vi somediff, vim также показывает CRLF как ^ M. но cat -v аккуратный. - person Nick X; 28.11.2018
comment
+1 не в последнюю очередь за то, что после 20 лет использования позволил мне изучить вариант cat, о котором я не знал. :-) - person Harald; 07.04.2020

Один из способов увидеть изменения пробелов - это посимвольно "word diff" с

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

Это выделяет все изменения пробелов везде в строках. Удаленные пробелы заключаются в [- и -] и добавляются пробелы в {+ и +}.

В качестве альтернативы, как предложено Алексом

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

выделяет все изменения пробелов на концах строк.

person ntc2    schedule 13.04.2016

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

выделяет пробелы в измененных строках.

person Alex    schedule 10.04.2016
comment
Какую версию git вы используете? git 2.1.4 в моей системе говорит --ws-error-highlight = new, old - недопустимый параметр. - person cardiff space man; 22.01.2020
comment
Эта опция была добавлена ​​в 2015 году в git 2.5.0. - person MiniGod; 25.08.2020
comment
Моя версия git 2.8.2.windows.1 показывает ^M в строках +, но не в строках -, что заставляет меня думать, что моя IDE (PhpStorm) меняет окончания строк в стиле DOS, хотя на самом деле это не так. Это просто сохранение существующих окончаний строк в старых файлах, созданных плохим редактором. Ваше исправление показывает окончания строк как для -, так и для +, что git должен делать в первую очередь. - person Buttle Butkus; 03.03.2021

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

Используйте meld и установите в настройках отображение пробелов. (Правка -> Настройки -> Показать пробелы.)

Другие графические инструменты, вероятно, имеют аналогичные параметры - ответ + комментарий @ Cotton расскажет вам, как это сделать с помощью vimdiff.

person bstpierre    schedule 13.10.2010
comment
Графический инструмент сравнения может быть недоступен. Ответ @ paul-whittaker будет работать в контексте, подразумеваемом вопросом (некоторый терминал). - person beOn; 16.01.2018
comment
Вот это странно, но git difftool --tool=meld doesn't даже запускать мельд. Я не знаю, происходит ли это из-за того, что выполняется перебазирование или нет. - person cardiff space man; 22.01.2020
comment
Meld не показывает, являются ли символы новой строки LF или CRLF. - person daniol; 06.04.2021