Как я могу настроить Mercurial для использования WinMerge для слияний в Cygwin?

Когда Mercurial работает под управлением Cygwin, немного сложно понять, как запустить WinMerge для разрешения конфликтов слияния. Как я могу это сделать?

2 ответа

Решение

Хитрость заключается в том, что пути cygwin не совпадают с путями Windows, поэтому вам необходим небольшой скрипт, который преобразует пути cygwin в пути Windows, прежде чем передавать их в качестве аргументов WinMerge.

Вот как это сделать:

(1) Создать сценарий оболочки в /usr/bin/winmerge следующее:

#!/bin/sh
"/cygdrive/c/Program Files/WinMerge/WinMergeU.EXE" /e /ub /dl other /dr local `cygpath -aw $1` `cygpath -aw $2` `cygpath -aw $3`

Замечания: cygpath преобразует имена путей. Если WinMerge не находится по умолчанию, измените путь здесь.

(2) Сделать этот файл исполняемым

 chmod +x /usr/bin/winmerge

(3) Добавьте следующее к вашему ~/.hgrc файл:

[ui]
merge = winmerge

[merge-tools]
winmergeu.executable=/usr/bin/winmerge
winmergeu.args=$other $local $output
winmergeu.fixeol=True
winmergeu.checkchanged=True
winmergeu.gui=False

Заметка! Возможно, у вас уже есть раздел [ui] с вашим именем. Не забудьте объединить мои изменения с вашими, а не просто добавить новый раздел [ui]. Например, мой.hgrc выглядит так:

[ui]
username = Joel Spolsky <spolsky@example.com>
merge = winmergeu

[extensions]
fetch =

[merge-tools]
winmergeu.executable=/usr/bin/winmerge
winmergeu.args=$other $local $output
winmergeu.fixeol=True
winmergeu.checkchanged=True
winmergeu.gui=False

Вот строка сценария оболочки, которая работает для Subversion/cygwin/WinMerge. Основное различие заключается в том, какие аргументы использовать.

/cygdrive/c/Program\ Files/WinMerge/WinMergeU.exe /e /ub /dl "$3" /dr "$5" "`cygpath -aw $6`" "`cygpath -aw $7`" &

Обратите внимание, что этот пример также устанавливает поля описания и запускает сравнения в фоновом режиме, так что все различия запускаются одновременно. Если вам это не нравится, удалите "&".

Если вы не знаете, что передает вам ваша программа контроля версий, попробуйте добавить 'echo $@' в ваш скрипт оболочки. Он напечатает аргументы, переданные сценарию.

Другие вопросы по тегам