Игнорировать * все * изменения пробелов с помощью git-diff между коммитами
Я прохожу через кодовую базу и исправляю странности пробелов и вообще исправляю отступы и такие вещи, и я хочу убедиться, что я случайно не сделал никаких других изменений, поэтому я делаю git diff -w
для отображения различий во всех измененных файлах, игнорируя различия пробелов. Проблема в том, что на самом деле это не игнорирование все пробел различия-по крайней мере, что Я считаю просто пробел различия. Например, в следующий вывод из git diff -w
,
-"Links":
-{
-
- "Thermal":
-
-{
-
+ "Links": {
+ "Thermal": {
вы можете видеть, что я только
- удалены лишние пустые строки
- поставить фигурные скобки в конце строки ключа, значение которого они открывают, и
- отступ в соответствии с контекстом
этот вопрос похоже, что сначала он может предложить ответ, но он имеет дело с различиями между двумя конкретными файлы, а не между двумя конкретными commits. Все остальное, обнаруженное в ходе поисков, тоже было тупиком. Например, этот вопрос - это слияние, а не отображение различий и этот вопрос занимается отображением различий на уровне слов и так далее.
2 ответов
возможно, есть лучший ответ, но лучшее решение, которое я нашел до сих пор, это.
во-первых, вы должны контролировать определение "пробелов", которое Git в настоящее время использует. Создайте или отредактируйте .gitconfig
в вашем проекте, чтобы включить
[core]
whitespace = -trailing-space,-indent-with-non-tab,-tab-in-indent
Далее, вы должны контролировать определение используемого слова. Вместо того, чтобы просто использовать git diff -w
добавьте --word-diff-regex=[^[:space:]]
:
git diff -w --word-diff-regex=[^[:space:]]
вы все равно увидите контекст, который (в моем случае, так как я пытаюсь убедиться, что есть никаких различий за исключением пробелы различия) не помогает. Вы можете использовать -U0
чтобы сказать Git, чтобы дать вам 0 строк контекста, например,
git diff -w -U0 --word-diff-regex=[^[:space:]]
но вы все равно получите вывод, который выглядит почти как контекст, но все равно намного лучше, чем внимательно и вручную просматривать все изменения, чтобы убедиться, что они являются только пробелами.
игнорировать все пробелы меняются с помощью git-diff между фиксациями
этот вопрос выглядел так, как будто он может предложить ответ сначала, но он касается различий между двумя конкретными файлами, а не между двумя конкретными фиксациями. Все остальное, обнаруженное в ходе поисков, тоже было тупиком....
Я думаю, что у вас возникли проблемы, потому что Git-это неправильный инструмент для работы. Это не делает задачу легкой и уступчивой, чтобы приспособиться инструмент-неправильный подход. Инструменты должны работать на вас, а не наоборот.
выполните второй клон, а затем проверьте начальную ревизию, о которой идет речь. Затем запустите regular diff на них, используя текущую ревизию:diff -bur --ignore-all-space <dir1> <dir2>
.
здесь некоторые варианты diff
-i, --ignore-case
ignore case differences in file contents
-E, --ignore-tab-expansion
ignore changes due to tab expansion
-Z, --ignore-trailing-space
ignore white space at line end
-b, --ignore-space-change
ignore changes in the amount of white space
-w, --ignore-all-space
ignore all white space
-B, --ignore-blank-lines
ignore changes where lines are all blank