2012-04-04 2 views
1

Рассмотрите проект Hg с двумя центральными ветвями/клонами - например. DEV и PRD. Когда кто-то подталкивает исправление к PRD, автоматический сценарий на центральном сервере переходит в DEV и вытаскивает новые изменения. Затем он пытается объединить исправление в DEV.hg автоматическое слияние с diff3

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

parent:3,7c 
four 
five 
six 

seven 

child1:3,7c 
four 
five5 
six6 

seven7 

child2:3,7c 
fourmore 
five 
six 
more 
seven 

Как вы можете видеть, реальных конфликтов здесь нет. Если мы делаем локальное слияние с kdiff, он решает этот простой случай без ввода пользователем!

Я бы хотел, чтобы центральный сервер мог управлять этими случаями. Я думал об использовании kdiff3 в бесшумном режиме, но я не могу установить kdiff3 на него (это только система CLI, к которой у нас даже нет доступа администратора), но, возможно, есть способ подключить diff3 к слиянию hg, чтобы он может разрешить простые случаи, подобные этому? Я попытался установить «[ui]/n merge = diff3» в hgrc, но он просто выплевывает три версии в stdout. У меня отсутствует какая-то дополнительная конфигурация? Или есть более простой/лучший инструмент?

Большое спасибо

ответ

1

diff3 Для использования в качестве инструмента слияния, вам нужно добавить

[merge-tools] 
diff3.args = $local $base $other -m > $output 

в файл конфигурации. При необходимости вы можете установить приоритет, см. the wiki. Вы также найдете более сложным recipes for using diff3 there.

Тем не менее, я тестировал, как diff3 рассматривает ваш сценарий с изменениями на смежных линиях, и так же, как Mercurial, он также отказался слиться с этим чисто. Различные инструменты слияния имеют разные пороговые значения для того, что они считают «конфликтом», и кажется, что KDiff3 более прощает, чем Mercurial и diff3.

Я предлагаю вам дать разработчику возможность сделать исправление на PRD ответственным за объединение его в DEV на месте, где у него есть доступ к таким инструментам, как KDiff3. Автоматическое слияние на сервере, как правило, считается плохим - слияние должно быть проверено только человеком, прежде чем вы их совершите. Это не много дополнительной работы после того, как вы сделали исправление.