Игнорировать пробелы при слиянии в Mercurial - PullRequest
7 голосов
/ 07 апреля 2011

Мы сталкиваемся с проблемой при слиянии в 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 на этом я получаю конфликт слияния.Если у нас есть конфликты на каждой линии, становится трудно и трудно разобраться в «реальных» конфликтах.Что бы я предпочел, чтобы процесс слияния подумал: «Хорошо, строка 1 ревизии 2 отличается от родительской только в пустом пространстве, поэтому считайте ее неизменной. В качестве результата слияния выберите строку 1 ревизии 1».

Ответы [ 2 ]

10 голосов
/ 07 апреля 2011

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

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

Например, с помощью популярного инструмента слияния kdiff3 вы бы включили параметр «Объединение пустых 2/3-файлов» и сказали ему, выбирать ли левую или правую.

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

0 голосов
/ 07 апреля 2011

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

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

...