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

86

Мой редактор меняет окончания строк в моих исходных файлах. Когда я это делаю 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 - это фигурная скобка '}'.
Cardiff Space Man
37

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

git diff | cat -v

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

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

droid7c2
источник
другой подобный подход: git diff > somediff && vi somediffvim также показывает CRLF как ^ M. но cat -vэто аккуратно.
Nick X
1
+1 не в последнюю очередь за то, что позволил мне узнать после 20 лет использования вариант, о catкотором я не знал. :-)
Харальд
25

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

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

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

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

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

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

ntc2
источник
12
git diff --ws-error-highlight=new,old

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

Alex
источник
Какую версию git вы используете? git 2.1.4 в моей системе говорит --ws-error-highlight = new, old - недопустимый параметр.
Cardiff Space Man
Эта опция была добавлена ​​в 2015 году в git 2.5.0.
MiniGod
5

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

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

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

Bstpierre
источник
Графический инструмент сравнения может быть недоступен. Ответ @ paul-whittaker будет работать в контексте, подразумеваемом вопросом (некоторый терминал).
beOn
Вот это странно, но git difftool --tool=meld doesn'tдаже запускать мельд. Я не знаю, происходит ли это из-за того, что выполняется перебазирование или нет.
Cardiff Space Man