25

我有冲突,所以我输入:

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

4

5 回答 5

21

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

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

于 2013-02-05T14:43:05.437 回答
6

我有一段时间没有在 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\"
于 2012-06-04T16:32:03.460 回答
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 位操作系统并且让 Git Extensions 安装程序安装了 kdiff3,那么您的 kdiff3 甚至不会自行运行。解决方案是下载 32 位版本 ( http://sourceforge.net/projects/kdiff3/files/kdiff3/ ) 并重新安装。我什至不需要先卸载 64 位版本,因为安装程序只是覆盖了以前的安装。

于 2015-01-16T17:58:45.610 回答
1

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

于 2020-11-30T09:14:54.727 回答
0

未来谷歌人的另一个答案:

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

于 2015-10-30T23:21:11.357 回答