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 来解决冲突?