Игнорировать пробелы при выполнении слияния в меркуриальных

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

В качестве примера попробуйте:

hg init testrepo
cd testrepo/

echo "This is text." > newfile.txt
hg add newfile.txt
hg commit -m "Created a file."
hg branch newbranch
echo "This is some more text." > newfile.txt
hg commit -m "Changed text in the file."
hg update default
echo "   This is text." > newfile.txt
hg commit -m "Added indentation whitespace."

Это приводит к двум ветвям: одно с изменением пробела, другое с текстовыми изменениями:

@  2     "   This is text".
|    
|
| o  1   "This is some more text."
|/     
|
o  0     "This is text."

При попытке hg merge на этом я получаю конфликт слиянием. Если у нас есть конфликты на каждой линии, становится трудным и трудоемким разобраться в "реальных" конфликтах. Я бы предпочел, чтобы процесс слияния думал: "ОК, changeet 2 строка 1 отличается от родительского только в пробеле, поэтому считайте его неизменным. Выберите changeet 1 строку 1 как результат объединения".

Ответ 1

Игнорирование пробелов или нет - это выбор, который делает ваш инструмент слияния. Вы можете настроить все способы слияния для использования с mercurial, как показано здесь: MergeToolConfiguration

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

Например, с помощью популярного инструмента для слияния kdiff3 вы должны включить настройку "Белое пространство 2/3 файл" и указать он должен выбрать левый или правый.

Tl; Dr: включите это в свой инструмент слияния, а не в меркурийном.

Ответ 2

Является ли это ситуацией, когда очистка пробелов будет сложной? Если нет, я бы написал простой script, который удаляет все пробелы перед регистрацией, чтобы избежать этого. Недостатком является то, что вы потеряете форматирование, но большинство IDE могут легко восстановить это для вас.

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