如何在 cygwin 下配置 Mercurial 以使用 WinMerge 进行合并?

发布于 2024-07-13 19:56:46 字数 127 浏览 7 评论 0原文

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

When Mercurial is running under cygwin, it's a bit tricky to figure out how to spawn WinMerge to resolve merge conflicts. How can I do this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

像你 2024-07-20 19:56:46

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

操作方法如下:

(1) 在/usr/bin/winmerge中创建shell脚本,如下所示:

#!/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

The trick is that cygwin paths are not the same as Windows paths, so you need a little script that converts the cygwin paths to Windows paths before passing them as arguments to WinMerge.

Here's how to do it:

(1) Create a shell script in /usr/bin/winmerge as follows:

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

Note: cygpath converts path names. If WinMerge isn't in the default location, change the path here.

(2) Make that file executable

 chmod +x /usr/bin/winmerge

(3) Add the following to your ~/.hgrc file:

[ui]
merge = winmerge

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

Note! You probably already have a [ui] section with your name in it. Remember to merge my changes with yours, don't just add a new [ui] section. For example, my .hgrc looks like this:

[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
心凉怎暖 2024-07-20 19:56:46

以下是适用于 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 脚本中。 它将打印传递给脚本的参数。

Here is the shell script line that works for Subversion/cygwin/WinMerge. The main difference is which arguments to use.

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

Note that this example also sets the description fields and launches the comparisons in the background, so that all diffs are launched at once. If you don't like that, remove the '&'.

If you don't know what your revision control program is passing you, try adding 'echo $@' to your shell script. It will print the arguments passed to the script.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文