Когда Mercurial работает под управлением cygwin, довольно сложно понять, как вызвать WinMerge для разрешения конфликтов слияния. Как я могу это сделать?
Как я могу настроить Mercurial на использование WinMerge для слияний под cygwin?
Ответы (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 <[email protected]>
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 $ @» в сценарий оболочки. Он напечатает аргументы, переданные скрипту.