Стратегия слияния Mercurial для каждого типа файлов - PullRequest
3 голосов
/ 11 февраля 2011

Все:

Я хочу использовать kdiff для объединения всех файлов с определенным суффиксом (скажем, * .c, * .h) и хочу сделать две вещи (отключить предварительную настройку и использовать внутреннюю: другую) для всех файлов с другим суффиксом (скажем, * .mdl).Цель этого состоит в том, чтобы позволить мне использовать тип 'слияния clobber' для определенного типа файла (то есть: не объединяемые файлы, такие как конфигурации, автоматически сгенерированные C, модели и т. Д.)

Inмой .hgrc я пробовал:

[merge-tools]
kdiff3=
clobbermerge=internal:other
clobbermerge.premerge = False

[merge-patterns]
**.c = kdiff3
**.h = kdiff3
**.mdl = clobbermerge

, но он все равно вызывает kdiff3 для всех файлов.Мысли?

Расширением этого было бы выполнение 'слияния clobber' с каталогом - но как только синтаксис ясен для суффикса файла, каталог должен быть простым.

Ответы [ 2 ]

3 голосов
/ 11 февраля 2011

Инструменты слияния могут использовать любой исполняемый файл. Чтобы настроить инструмент слияния, который всегда перезаписывает $base с помощью $other, вы можете использовать следующее:

[merge-tools]
clobbermerge.priority = 100
clobbermerge.premerge = False
clobbermerge.args = $other $output
clobbermerge.executable = <copy executable>

При использовании этой стратегии в Windows возникает одна проблема. Вы не можете просто заменить <copy executable> командой оболочки copy. По какой-то причине Mercurial не удается найти команды оболочки в этом контексте. Я не пробовал это на * nix.

Чтобы обойти эту проблему, вы можете создать дистрибутив пакетного файла, который выполняет копирование. Просто нужно запустить: copy %1 %2. После размещения на вашем PATH вы можете установить clobbermerge.executable=clobber.bat.

Если у вас установлен kdiff3 (поставляется с TortoiseHg в Windows), вы можете получить те же результаты без внешнего командного файла, используя такую ​​конфигурацию:

[merge-tools]
clobbermerge.priority = 100
clobbermerge.premerge = False
clobbermerge.args = --auto $base $other $other -o $output
clobbermerge.executable = kdiff3

Ключом к этой конфигурации является поле args:

  • --auto: говорит kdiff3 не открывать графический интерфейс, если нет конфликтов
  • $base $other $other: приказывает kdiff3 использовать только $other
  • $output: сообщает kdiff3 имя выходного файла
0 голосов
/ 11 февраля 2011

Согласно этой странице Mercurial MergeToolConfiguration , вы должны поставить interal:other непосредственно после шаблона совпадения:

[merge-patterns]
**.mdl = internal:other
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...