9

当 Mercurial 在 cygwin 下运行时,弄清楚如何生成WinMerge来解决合并冲突有点棘手。我怎样才能做到这一点?

4

2 回答 2

16

诀窍是 cygwin 路径与 Windows 路径不同,因此您需要一个小脚本将 cygwin 路径转换为 ​​Windows 路径,然后再将它们作为参数传递给 WinMerge。

这是如何做到的:

(1) 创建一个shell脚本/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
于 2009-02-14T05:06:26.433 回答
0

这是适用于 Subversion/cygwin/WinMerge 的 shell 脚本行。主要区别在于使用哪些参数。

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

请注意,此示例还设置描述字段并在后台启动比较,以便立即启动所有差异。如果您不喜欢这样,请删除“&”。

如果您不知道您的版本控制程序传递给您的是什么,请尝试将“echo $@”添加到您的 shell 脚本中。它将打印传递给脚本的参数。

于 2009-12-24T21:35:50.923 回答