Подтвердить что ты не робот

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

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

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

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

  • удалены лишние пустые строки,
  • положить фигурные скобки в конце строки ключа, значение которого они открывают, и
  • с отступом для соответствия контексту

Этот вопрос выглядел так, как будто он может сначала дать ответ, но он касается различий между двумя конкретными файлами, а не между двумя конкретными коммитами. Все остальное, вызванное поисками, также было тупиком. Например, этот вопрос связан с слиянием, а не с отображением различий, а этот вопрос касается отображения уровня слова различия и т.д.

4b9b3361

Ответ 1

Возможно, есть лучший ответ, но лучшим решением, которое я нашел до сих пор, является это.

Во-первых, вы должны контролировать определение "пробелов", которое в настоящее время использует 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:]]

но вы все равно получите вывод, который будет выглядеть в основном как контекст, но он все же намного лучше, чем просматривать все изменения тщательно и вручную, чтобы убедиться, что они только изменения в пробелах.

Ответ 2

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

Этот вопрос выглядел так, будто сначала он мог дать ответ, но он касается различий между двумя конкретными файлами, а не между двумя конкретными коммитами. Все остальное, появившееся в результате поиска, тоже было тупиком.

Я думаю, что у вас проблемы, потому что Git - неправильный инструмент для работы. Это не делает задачу легкой, и уступка для размещения инструмента является неправильным подходом. Инструменты должны работать для вас, а не наоборот.

Выполните второй клон, а затем проверьте исходную ревизию. Затем запустите регулярный 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

Ответ 3

Для пользователей Bitbucket существует предлагаемое исправление, но оно еще не закодировано и, вероятно, не будет, пока не будет достаточно интереса. Вы можете перейти на сайт Bitbucket и показать свою поддержку. Сначала я нашел текущую страницу во время поиска решения в Bitbucket, поэтому, если в этой ситуации есть другие, пройдите здесь и проголосовате