Git diff -w игнорировать пробелы только в начале и конце строк

367

Я люблю использовать, git diff -wчтобы игнорировать различия между пробелами. Но я только что заметил, что он игнорирует даже различия между пробелами в середине строк. Как я мог игнорировать только различия между пробелами, которые появляются в начале (^) или конце ($) строк?

ma11hew28
источник
31
Рассматривается использование git diff -bвместо?
Йонас Быстрем
5
"-b --ignore-space-change Игнорировать изменения количества пробелов. Это игнорирует пробелы в конце строки и считает все другие последовательности одного или нескольких пробельных символов эквивалентными."
Mowwwalker

Ответы:

451

Для конца строки используйте:

git diff --ignore-space-at-eol

Вместо того, что вы используете в настоящее время:

git diff -w (--ignore-all-space)

Для начала линии ... вам не повезло, если вы хотите встроенное решение.

Тем не менее, если вы не возражаете запачкать руки, то где-то там есть довольно старый патч, который добавляет поддержку «--ignore-space-at-sol».

Поддельный код Обезьяны Рашид
источник
Спасибо, но это не сработает, если вы настроили diff для внешнего инструмента ... есть идеи?
adardesign
@adardesign, я думаю, что это должно быть настроено во внешнем инструменте. Я не уверен, что git может что-то сделать, чтобы представить diff без изменений пробелов ... хотя это может быть неправильно; мерзавец довольно мощный ...
Джонни
Было бы неплохо настроить его по умолчанию. Я имею в виду -w или -b или --ignore-all-space. Об этом есть обсуждение на stackoverflow.com/questions/7310033/…
Артём
8
Я согласен с предложением -b, так как -w рассматривает "abc def" и "abcdef" как одно и то же, что редко то, что я хочу!
Ричард Уайзман
3

Это старый вопрос, но он все еще регулярно просматривается / нужен. Я хочу предупредить таких читателей, как я, о том, что пробел, упомянутый в вопросе OP, не совпадает с определением Regex, и включает символы новой строки, табуляции и пробела - Git просит вас быть явным. Смотрите некоторые варианты здесь: https://git-scm.com/book/en/v2/Customizing-Git-Git-Configuration

Как указано, git diff -bили git diff --ignore-space-changeбудет игнорировать пробелы в конце строки. Если вы хотите, чтобы этот параметр был вашим поведением по умолчанию, следующая строка добавляет это намерение в ваш файл .gitconfig, поэтому он всегда будет игнорировать пробел в конце строки:

git config --global core.whitespace trailing-space

В моем случае я нашел этот вопрос, потому что мне было интересно игнорировать «различия пробелов при возврате каретки», поэтому мне нужно было следующее:

git diff --ignore-cr-at-eolили git config --global core.whitespace cr-at-eolот сюда .

Вы также можете установить его по умолчанию только для этого репо , пропустив параметр --global и проверив файл настроек для этого репо. Для проблемы CR, с которой я столкнулся, после регистрации она исчезает, если warncrlf или autocrlf = true в разделе [core] файла .gitconfig.

сбрасывается
источник