Раскраска пробелов в выводе git-diff - PullRequest
138 голосов
/ 10 марта 2011

Что касается форматирования кода, я немного пурист :). Я очень часто удаляю ненужные пробелы (строки только с w, w в конце строк и т. Д.). Я даже установил vim, чтобы показать такие линии, окрашенные в красный цвет.

Моя проблема в том, что, используя git-diff, я часто вижу что-то вроде этого:

-      else{ 
+      else{

Даже если у меня цвет git-diff, я не вижу разницы (в этой конкретной ситуации я убрал 1 ws в конце строки). Есть ли какой-нибудь способ сказать git-diff, чтобы он показал, что ws окрашен в красный? (например, те, которые соответствуют / \ s + $ / regexp).

Ответы [ 4 ]

157 голосов
/ 10 марта 2011

Возможно, вам потребуется установить параметр конфигурации color.diff.whitespace, например, с:

 git config color.diff.whitespace "red reverse"

(я предполагаю, что у вас уже color.diff или color.ui установлено значение auto, поскольку вы говорите, что в любом случае видите цветные пятна от git diff.)

Если вы хотите точно настроить тип ошибок пробелов, которые выделены красным цветом, вы можете изменить core.whitespace, но blank-at-eol включен по умолчанию, поэтому вам, вероятно, не придется изменять это для примера, который вы упомянуть.

Возможный источник путаницы заключается в том, что в выходных данных git diff ошибки пробелов выделяются только во введенных строках, а не в удаленных. ( Обновление: , как Пол Уиттакер указывает в своем ответе , который вы должны проголосовать с повышением :), вы можете увидеть это, изменив смысл различий на git diff -R.)

Дополнительную документацию по этим параметрам конфигурации вы можете найти на справочной странице git config

Если вы не хотите использовать -R kludge, вы можете использовать опцию WhiteSpace Error Highlight со страницы руководства diff .

- WS-ошибок изюминки =

Подсвечивать пробельные ошибки в строках, указанных цветом, указанным в color.diff.whitespace. это запятая отдельный список старого, нового, контекста. Когда эта опция не указана, подсвечиваются только пробельные ошибки в новых строках. Например. --ws-error-highlight = new, old подсвечивает ошибки пробелов на удаленных и добавленных строках. все могут быть использованы в качестве сокращения для старый, новый контекст.

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

или

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

Я не знаю способа навсегда включить это и сохранить его в конфигурации, кроме использования псевдонима:

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

Теперь вы можете использовать:

git df <file>

Чтобы увидеть изменения в красном.

Обратите внимание, что с Git 2.11 (4 квартал 2016 года) , этот псевдоним может быть заменен на:

git config diff.wsErrorHighlight all

См. документ по git diff и по git config.

127 голосов
/ 16 июля 2012

Используйте git diff -R, чтобы превратить удаленные строки в добавленные строки. Затем будут выделены конечные пробелы.

(Предполагается, что у вас уже включена подсветка пробелов в соответствии с настройками цвета из ответа Марка. Кредит для этого метода отправляется на пост Джунио по адресу http://git.661346.n2.nabble.com/Highlighting-whitespace-on-removal-with-git-diff-td5653205.html.)

Например, при преобразовании файла из концов строки DOS в Unix, git diff -R ясно показывает мне ^M символов (dis), появляющихся на концах строк. Без -R (а также без -w и т. Д.) Это показывает, что весь файл изменился, но не показывает, как.

9 голосов
/ 25 июля 2013

Используйте git diff --color | less -R.-R делает коды управления цветом удобными для человека.

Затем вы можете использовать поиск по регулярному выражению less, например,

/[[:space:]]+$
1 голос
/ 10 марта 2011

Моя версия git diff, кажется, уже делает это - у меня есть git 1.7.4.1 и я установил color.ui = auto.

...