2015-10-15 1 views
29

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

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

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

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

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

ответ

24

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

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

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

+1

@Torek - еще один кусок Git доброту. Почему, черт возьми, так сложно разобраться без всех пробелов ??? Я на машине Windows, пытаясь оценить PR-файлы проекта Visual Studio. Меня не интересуют различия в CR, LF или CRLF, но это то, что Git заполняет моим терминалом. – jww

9

Игнорировать все пробельные изменения с GIT-дифф между совершает

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

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

Выполните второй клон, а затем проверьте исходную ревизию. Затем запустите регулярный diff, используя текущую ревизию: diff -bur --ignore-all-space <dir1> <dir2>.

Вот some of the options for 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 
0

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