2

Я хочу объединить некоторые вещи в Mercurial, используя kdiff3. Поэтому я установил kdiff3 и добавил следующее в ~/.hgrc:

[extdiff]
cmd.kdiff3 =

[merge-tools]
kdiff3.args = $base $local $other -o $output

Но Mercurial продолжает вызывать FileMerge как инструмент слияния. Сначала я проверил, работает ли kdiff3 вообще. Звонок от прожектора открыл его. Затем я вызвал его из командной строки, чтобы проверить, не может ли HG вызвать его, но это также сработало. Тогда я нашел где-то подсказку, чтобы пройти полный путь в .hgrc:

[extdiff]
cmd.kdiff3 = /Applications/kdiff3.app/Contents/MacOS/kdiff3

Но это тоже не помогло. Когда Mercurial хочет открыть инструмент слияния, также нет сообщения об ошибке от kdiff3, только некоторые странные ошибки из FileMerge.

Вопрос: почему Mercurial отказывается открывать kdiff3?

1 ответ1

4

Благодаря бесконечным усилиям одного из самых вежливых пользователей по обмену стеками, я наконец-то понял, что Mercurial Wiki, похоже, устарела. Там это говорит:

Добавить в ~/.hgrc:

[extensions] 
hgext.extdiff =

[extdiff]
cmd.kdiff3 =

[merge-tools]
kdiff3.args = $base $local $other -o $output

Расширение extdiff не требуется, так как я не хочу определять здесь новую команду hg kdiff3 .

Но у Mercurial есть еще несколько настроек для инструмента слияния:

[ui]
merge = kdiff3

Что касается справки Mercurial по инструментам слияния, настройка ui.merge не обязательна, поскольку я специально установил конфигурацию инструментов слияния:

Mercurial использует эти правила при решении, какой инструмент слияния использовать:

  1. Если инструмент был указан с параметром --tool для слияния или разрешения, он используется. Если это имя инструмента в конфигурации инструментов слияния, используется его конфигурация. В противном случае указанный инструмент должен быть исполняемым оболочкой.
  2. Если переменная окружения "HGMERGE" присутствует, ее значение используется и должно выполняться исполняемой оболочкой.
  3. Если имя файла файла для слияния совпадает с любым из шаблонов в разделе конфигурации шаблонов слияния, используется первый пригодный для использования инструмент слияния, соответствующий соответствующему шаблону. Здесь двоичные возможности инструмента слияния не рассматриваются.
  4. Если ui.merge установлен, он будет считаться следующим. Если значение не является именем настроенного инструмента, указанное значение используется и должно быть выполнимо оболочкой. В противном случае указанный инструмент используется, если он пригоден для использования.
  5. Если какие-либо используемые инструменты слияния присутствуют в разделе конфигурации инструментов слияния, используется тот, который имеет наивысший приоритет.
  6. Если в системе можно найти программу с именем "hgmerge", она используется, но по умолчанию она не будет использоваться для символических ссылок и двоичных файлов.
  7. Если файл, который должен быть объединен, не является двоичным и не является символической ссылкой, то используется внутренний «:merge».
  8. Слияние файла не удается и должно быть решено до принятия.

У меня почему-то возникает ощущение, что Mercurial изменил свое поведение здесь (или какой-то другой части моей системы), потому что на всех машинах, где я использовал kdiff3, у меня нет последней настройки в моем .hgrc. Тем не менее, добавление ui.merge делает свое дело.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .