Игнорировать * все * изменения пробелов с помощью git-diff между коммитами

Я прохожу через кодовую базу и исправляю странности пробелов и вообще исправляю отступы и такие вещи, и я хочу убедиться, что я случайно не сделал никаких других изменений, поэтому я делаю git diff -w для отображения различий во всех измененных файлах, игнорируя различия пробелов. Проблема в том, что на самом деле это не игнорирование все пробел различия-по крайней мере, что Я считаю просто пробел различия. Например, в следующий вывод из git diff -w,

-"Links":
-{
-
-    "Thermal":
-
-{
-
+  "Links": {
+    "Thermal": {

вы можете видеть, что я только

  1. удалены лишние пустые строки
  2. поставить фигурные скобки в конце строки ключа, значение которого они открывают, и
  3. отступ в соответствии с контекстом

этот вопрос похоже, что сначала он может предложить ответ, но он имеет дело с различиями между двумя конкретными файлы, а не между двумя конкретными 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