Настройка Mercurial - FileMerge для Apple Mac OS X - PullRequest
23 голосов
/ 20 августа 2009

Как настроить программу Apple FileMerge для работы в качестве инструмента слияния Mercurial? У меня есть настройки файла .hgrc в моем домашнем каталоге, и я просто хочу настроить FileMerge в качестве программы слияния.

Ответы [ 5 ]

28 голосов
/ 20 августа 2009

Как описано в hg wiki , это работало для меня с различными версиями hg:

  • Создайте сценарий где-нибудь в вашем $PATH, скажем, в /usr/local/bin:
$ vim /usr/local/bin/opendiff-w

#!/bin/sh
# opendiff returns immediately, without waiting for FileMerge to exit.
# Piping the output makes opendiff wait for FileMerge.
opendiff "$@" | cat
  • Добавьте следующие разделы к вашему ~/.hgrc:
[extdiff]
cmd.interdiff = hg-interdiff
cmd.opendiff = opendiff-w

[merge-tools]
filemerge.executable = opendiff-w
filemerge.args = $local $other -ancestor $base -merge $output

[extensions]
extdiff = 

Теперь вы можете использовать его как $hg opendiff.

2 голосов
/ 20 августа 2009

Обновление: в вики Mercurial есть страница о FileMerge . Сначала прочтите это.

Я не пытался использовать FileMerge, но общий обзор может помочь. Большая часть того, что вы хотите знать, описана на странице MergeProgram вики Mercurial. Короткая версия - ваш типичный выбор:

Установите переменную окружения HGMERGE так, чтобы она указала на нужный инструмент объединения.

или добавьте следующее к вашему .hgrc:

 [ui]
 merge = /path/to/toolname

 [merge-tools]
 toolname.args = $base $local $other

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

1 голос
/ 19 марта 2013

Ни одна из связанных ссылок не работала у меня без изменений; в конце концов я закончил тем, что сделал комбинацию официальных инструкций и "Использование Vim как программы filemerge" из https://www.mercurial -scm.org / wiki / TipsAndTricks . Я создал скрипт opendiff-w, описанный в этом ответе (хотя я назвал его hgvdiff), и поместил в мой .hgrc следующее:

[extdiff]
cmd.interdiff = hg-interdiff
cmd.opendiff = /usr/local/bin/hgvdiff

[merge-patterns]
** = filemerge

[merge-tools]
filemerge.executable = /usr/local/bin/hgvdiff
filemerge.args = $local $other -ancestor $base -merge $output
filemerge.checkchanged = true
filemerge.gui = true

[extensions]
extdiff =

Это в меру функциональный, хотя иногда он выполняет проверку на предмет преждевременного изменения файла, что приводит к куче:

 output file wwwroot/zoomingo/website/protected/messages/en/z.php appears unchanged
was merge successful (yn)? n

при закрытии FileMerge.

0 голосов
/ 24 октября 2013

Вот как я это исправил:

Создано /usr/local/bin/opendiff-w заполнено:

#!/bin/sh
# opendiff returns immediately, without waiting for FileMerge to exit.
# Piping the output makes opendiff wait for FileMerge.
opendiff "$@" | cat

Затем запустил команду: sudo chmod +x /usr/local/bin/opendiff-w

Затем отредактировал ~/.hgrc со следующим дополнением:

[extdiff]
cmd.interdiff = hg-interdiff
cmd.opendiff = opendiff-w

[merge-tools]
filemerge.executable = /usr/local/bin/opendiff-w
filemerge.args = $local $other -ancestor $base -merge $output

[extensions]
extdiff = 

Затем я запустил следующую команду, чтобы проверить, работает ли она: hg opendiff

Однако я получил следующую ошибку:

exception raised trying to run FileMerge: launch path not accessible

Чтобы исправить это, я выполнил следующую команду:

sudo /usr/bin/xcode-select -switch /Applications/Xcode.app/Contents/Developer/

Теперь это должно сработать и открыть FileMerge.

=============================================== =====================

Если вы используете TorsoiseHg для Mac, единственное, что вам нужно сделать сейчас, чтобы работать с FileMerge, - это выбрать filemerge из Обнаруженных инструментов слияния / различий при появлении окна Resolve Conflict и выбрать Tool Resolve. *

enter image description here

Надеюсь, это поможет.

0 голосов
/ 20 августа 2009

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

Итак:

[ui]  
merge = /Developer/Applications/Utilities/FileMerge.app/Contents/MacOS/FileMerge
...