Kdiff3 不会用 mergetool 命令打开

Posted

技术标签:

【中文标题】Kdiff3 不会用 mergetool 命令打开【英文标题】:Kdiff3 won't open with mergetool command 【发布时间】:2012-06-08 15:30:21 【问题描述】:

我有冲突,所以我输入:

git mergetool

然后我收到一条消息说:

按回车键开始合并解析工具

通常当我这样做时,它会打开 kdiff3,以便我可以合并差异。

现在当我这样做时,它只是继续到下一个文件,而 kdiff3 根本没有打开。

我三次检查了我的 git 配置和系统路径,一切看起来都很完美。配置文件如下:

 [merge]
    tool = kdiff3
 [mergetool "kdiff3"]
    path = c:/Program Files (x86)/KDiff3/kdiff3.exe
 [diff]
    guitool = kdiff3
 [difftool "kdiff3"]
    path = c:/Program Files (x86)/KDiff3/kdiff3.exe
 [core]
    editor = \"C:/Program Files (x86)/GitExtensions/GitExtensions.exe\" fileeditor   autocrlf = true
 [user]
    name = James Farrell
    email = info@jamespfarrell.com
 [github]
    user = whygosystems
    token = 87d00c2e613b3a7c8c1be817b75b8a33
 [diff]
    external = C:/Program Files (x86)/Git/cmd/git-diff-wrapper.sh

任何人有什么想法可能是错的吗?

我有一种感觉(虽然我可能是错的,这是一个问题,因为我安装了新的 Github windows 客户端)....

【问题讨论】:

我时常遇到这个问题,重启机器总是有帮助的。不知道为什么。 @eis 谢谢,我已经重新启动,但没有帮助。 遇到了同样的问题,对我来说这个workaround 有帮助。 【参考方案1】:

我有一段时间没有在 Windows 上为此目的使用 git,但是您的配置文件显示了一些有趣的差异:程序字符串。

[core]
    editor = \"C:/Program Files (x86)/GitExtensions/GitExtensions.exe\" fileeditor   autocrlf = true

[difftool "kdiff3"]
    path = c:/Program Files (x86)/KDiff3/kdiff3.exe

我怀疑程序名称中的空格可能存在问题。尝试将您的 diff/mergetool 可执行路径设置为:

path = \"c:/Program Files (x86)/KDiff3/kdiff3.exe\"

【讨论】:

【参考方案2】:

我知道这已经过时了,但是对于未来的 google 人来说,KDiff3 还有一个选项,如果合并是微不足道的,它会默默地解决它,甚至从不显示窗口。

我过去也遇到过这种情况,所以这可能是你正在发生的事情。我认为该选项称为“自动保存并在合并时退出而不会发生冲突”。

【讨论】:

这个选项确实是罪魁祸首,但它总是被触发,因为git调用kdiff3带有--auto标志,所以在kdiff3中禁用该选项无济于事。有关解决方法,请参阅我对此similar question 的回答。【参考方案3】:

同样,对于未来的 Google 员工:

从版本 2.48.02(2014 年 11 月 29 日)开始,Git Extensions 开始分发 64 位版本的 kdiff3。 (见https://github.com/gitextensions/gitextensions/blob/master/GitUI/Resources/ChangeLog.md#version-24802-29-november-2014。)

因此,如果您运行的是 32 位操作系统并且让 Git Extensions 安装程序安装了 kdiff3,那么您的 kdiff3 甚至不会自行运行。解决方法是下载32位版本(http://sourceforge.net/projects/kdiff3/files/kdiff3/)重新安装。我什至不需要先卸载 64 位版本,因为安装程序只是覆盖了之前的安装。

【讨论】:

【参考方案4】:

为未来的 Google 员工提供另一个答案:

实际上,不会启动任何外部合并工具。 2015 年 8 月提交了一个问题:https://jira.atlassian.com/browse/SRCTREEWIN-3543

【讨论】:

【参考方案5】:

Git 将--auto 硬编码为 KDiff3 的命令行选项,这会导致 如果所有冲突都可由 KDiff3 自动解决,则 GUI 不会显示

我们可以通过设置来改变这个默认行为:

git config --global mergetool.kdiff3NoAuto.cmd "/c/Program Files/KDiff3/kdiff3.exe --L1 \"\$MERGED (Base)\" --L2 \"\$MERGED (Local)\" --L3 \"\$MERGED (Remote)\" -o \"\$MERGED\" \"\$BASE\" \"\$LOCAL\" \"\$REMOTE\""

导致~/.gitconfig文件(或者你可以直接修改文件):

[merge]
        tool = kdiff3
[mergetool "kdiff3"]
        path = C:/Program Files/KDiff3/kdiff3.exe
        trustExitCode = false
        cmd = \"/c/Program Files/KDiff3/kdiff3.exe\" --L1 \"$MERGED (Base)\" --L2 \"$MERGED (Local)\" --L3 \"$MERGED (Remote)\" -o \"$MERGED\" \"$BASE\" \"$LOCAL\" \"$REMOTE\"
[diff]
        guitool = kdiff3
[difftool "kdiff3"]
        path = C:/Program Files/KDiff3/kdiff3.exe
        trustExitCode = false

这样,kdiff3 将始终打开,无论是否还有未解决的冲突。

参考:https://***.com/a/15813064/2303761

【讨论】:

谢谢。解决了我遇到的error while writing 错误。

以上是关于Kdiff3 不会用 mergetool 命令打开的主要内容,如果未能解决你的问题,请参考以下文章

如何正确使用 KDiff3 与 TortoiseSVN 来解决冲突?

使用 IntelliJ 作为 git mergetool 总是一启动就退出

Git:如何将 KDiff3 配置为合并工具和差异工具?

Git 合并工具性能

Ubuntu下Git安装图形化代码合并工具kdiff3

如何配置git mergetool配置