我想使用 kdiff3 在 mercurial 中合并一些东西。因此,我安装了 kdiff3 并将以下内容添加到~/.hgrc:
[extdiff]
cmd.kdiff3 =
[merge-tools]
kdiff3.args = $base $local $other -o $output
Run Code Online (Sandbox Code Playgroud)
但是 Mercurial 一直将 FileMerge 称为合并工具。我首先检查 kdiff3 是否正常工作。从聚光灯下调用它打开了它。然后我从命令行调用它以检查 HG 是否无法调用它,但这也有效。然后我在某处找到了在以下位置传递完整路径的提示.hgrc:
[extdiff]
cmd.kdiff3 = /Applications/kdiff3.app/Contents/MacOS/kdiff3
Run Code Online (Sandbox Code Playgroud)
但这也没有帮助。当 Mercurial 要打开合并工具时,kdiff3 也没有错误信息,只有 FileMerge 一些奇怪的错误。
问题是:为什么 Mercurial 拒绝打开 kdiff3?
感谢堆栈交换中一位最有礼貌的用户的不懈努力,我终于发现 mercurial wiki 似乎已经过时了。那里说:
添加到 ~/.hgrc:
Run Code Online (Sandbox Code Playgroud)[extensions] hgext.extdiff = [extdiff] cmd.kdiff3 = [merge-tools] kdiff3.args = $base $local $other -o $output
不需要 extdiff 扩展名,因为我不想在hg kdiff3这里定义新命令。
但是 Mercurial 对合并工具还有一些设置:
[ui]
merge = kdiff3
Run Code Online (Sandbox Code Playgroud)
关于合并工具的Mercurial 帮助,ui.merge不需要设置,因为我专门设置了一个合并工具配置:
Mercurial 在决定使用哪个合并工具时使用这些规则:
- 如果已使用 --tool 选项指定工具进行合并或解析,则使用该工具。如果是merge-tools 配置中的工具名称,则使用其配置。否则,指定的工具必须可由 shell 执行。
- 如果存在“HGMERGE”环境变量,则使用其值并且必须由 shell 执行。
- 如果要合并的文件的文件名与merge-patterns 配置部分中的任何模式匹配,则使用与匹配模式对应的第一个可用合并工具。这里不考虑合并工具的二进制功能。
- 如果设置了 ui.merge 则接下来会考虑。如果该值不是已配置工具的名称,则使用指定的值并且必须可由 shell 执行。否则,如果可用,则使用命名工具。
- 如果合并工具配置部分中存在任何可用的合并工具,则使用具有最高优先级的工具。
- 如果可以在系统上找到名为“hgmerge”的程序,则会使用它 - 但默认情况下它不会用于符号链接和二进制文件。
- 如果要合并的文件不是二进制文件,也不是符号链接,则使用内部 ":merge"。
- 文件合并失败,必须在提交前解决。
我以某种方式感觉 Mercurial 在这里(或我系统的其他部分)改变了它的行为,因为在我使用 kdiff3 的所有机器上,我的 .hgrc 中没有最后一个设置。但是,添加ui.merge可以解决问题。
| 归档时间: |
|
| 查看次数: |
1447 次 |
| 最近记录: |