Игнорировать * все * пробельные изменения с помощью git -diff между фиксациями
Я просматриваю кодовую базу и исправляю странные странности и обычно исправляю отступы и такие вещи, и я хочу убедиться, что я не сделал никаких непредвиденных изменений, поэтому я делаю git diff -w
для отображения различий в все измененные файлы игнорируются без пробелов. Проблема в том, что на самом деле это не игнорирует все пробелы, по крайней мере, то, что я считаю просто пробелами. Например, на следующем выходе из git diff -w
,
-"Links":
-{
-
- "Thermal":
-
-{
-
+ "Links": {
+ "Thermal": {
вы можете видеть, что я только
- удалены лишние пустые строки,
- положить фигурные скобки в конце строки ключа, значение которого они открывают, и
- с отступом для соответствия контексту
Этот вопрос выглядел так, как будто он может сначала дать ответ, но он касается различий между двумя конкретными файлами, а не между двумя конкретными коммитами. Все остальное, вызванное поисками, также было тупиком. Например, этот вопрос связан с слиянием, а не с отображением различий, а этот вопрос касается отображения уровня слова различия и т.д.
Ответы
Ответ 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, поэтому, если в этой ситуации есть другие, пройдите здесь и проголосовате