Слияние без пробелов

179

У меня проблема с большим коммитом, который изменяет около тысячи строк кода, удаляя пробелы в конце строк и удаляя пробелы перед табуляцией.

Для этого проекта также имеется около 50 запросов на выборку, и все они будут конфликтовать при объединении моего коммита. Есть ли способ настроить git таким образом, чтобы при объединении будущих коммитов он игнорировал конфликты, когда один из них - просто изменение пробела?

Изменение самого git или использование стороннего инструмента невозможно, но использование ловушки - это нормально.

callumacrae
источник
Возможный дубликат мерзких пробельных бед
Сис Тиммерман

Ответы:

246
 git merge -Xignore-all-space

Или (точнее)

 git merge -Xignore-space-change

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

Смотрите git diff :

--ignore-space-change

Игнорировать изменения в количестве пробелов.
Это игнорирует пробелы в конце строки и считает все другие последовательности одного или нескольких пробельных символов эквивалентными.

--ignore-all-space

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

ks1322 добавляет в комментарии хороший совет:

Стоит объединить --no-commitи проверить слияние до фактической фиксации .


OP Каллум Macrae сообщает , что в этом случае слияние продолжить бесперебойно, и замыкающие пробелы , содержащиеся в запросе , тянуть патчи применяются к локальным файлам.
Тем не менее, OP использует хук предварительной фиксации, который заботится о указанных конечных пробелах.
(Я полагаю, немного похож на этот , также упоминается здесь ).


Ссылка на пре-фиксацию OP указана здесь :

В дополнение к удалению конечных пробелов, он удаляет от одного до трех пробелов перед вкладками (у меня установлена ​​ширина вкладки 4) и добавляет EOL.
У меня были сообщения о том, что код, который добавляет EOL, удаляет файл в Windows, но я не смог его воспроизвести.

VonC
источник
1
Из моих тестов до сих пор похоже, что он удаляет все изменения пробелов в файле. Тем не менее, теперь я использую ловушку перед фиксацией, чтобы удалить хвостовые пробелы, так что это не проблема.
Калумарак
1
@CallumMacrae: хорошо, и спасибо за отзыв. Опять же, я добавил вашу ссылку в ответе для большей наглядности.
VonC
1
git merge -Xignore-space-change- Ну, я могу сказать наверняка , это не работа ... . Один кусок пробела, который я пытался удалить, остался. Git абсолютно отстой.
jww
1
Стоит объединить --no-commitи проверить слияние до фактической фиксации.
ks1322
1
-Xignore-all-space, похоже, ничего не делает с пробелами, и --ignore-space-change не был опознан git как опция
Preza8