Kdiff3没有使用mergetool命令打开

时间:2012-06-04 14:51:02

标签: git git-bash kdiff3

我有冲突,所以我输入:

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客户端)....

5 个答案:

答案 0 :(得分:21)

我意识到这是旧的,但对于未来的googlers,KDiff3也有一个选项,如果合并是微不足道的,它将默默地解决它,甚至从不显示窗口。

过去我曾经遇到过这种情况,所以它可能正在发生在你身上。我认为该选项被称为“自动保存并退出合并而不会发生冲突”。

答案 1 :(得分:5)

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

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

VS

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

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

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

答案 2 :(得分:2)

再次,对于未来的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位操作系统并且安装了Gd Extensions安装程序kdiff3,那么您的kdiff3甚至不会自行运行。解决方案是下载32位版本(http://sourceforge.net/projects/kdiff3/files/kdiff3/)并重新安装。我甚至不需要先卸载64位版本,因为安装程序只是覆盖了以前的安装。

答案 3 :(得分:0)

Yet another answer for future Googlers:

Actually, no external merge tool will start. An issue was filed in August 2015: https://jira.atlassian.com/browse/SRCTREEWIN-3543

答案 4 :(得分:0)

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://stackoverflow.com/a/15813064/2303761