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

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


person Joel Spolsky    schedule 14.02.2009    source источник


Ответы (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
person Joel Spolsky    schedule 14.02.2009
comment
Я бы, вероятно, не стал помещать этот сценарий в / usr / bin /. Я собирался преследовать вас за то, что вы не использовали cygpath, но затем я прокрутил блок кода и увидел, что вы делаете. - person Jon Ericson; 21.02.2009

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

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

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

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

person Bob    schedule 24.12.2009