最近我在使用GitExtension 2.46,但是Git版本是1.9.4.msysgit.2。为了只使用Git命令,我卸载了GitExtension并安装了最新版本的Git和KDiff3。
当我进行合并并且有冲突时,我运行以下命令:
git mergetool
然后我收到了这样的信息:
合并工具kdiff3不能作为'kdiff3'使用。
我猜它肯定是通过KDiff3路径。
环境
操作系统:Windows 10
Git 2.6。1 windows。
KDiff3 0.9.98(64位)
问题:
我必须在.gitconfig文件中配置git mergetool命令,以打开带有冲突文件的LOCAL、REMOTE、BASE和MERGED版本的KDiff3 GUI ?
我如何配置它来使用它作为一个差异工具?
(当试图从WSL git中找到如何使用kdiff3时,我在这里结束了,并得到了最后的部分,所以我将为其他人发布我的解决方案,同时试图找到答案)
如何使用kdiff3作为WSL git的diff/合并工具
有了Windows更新1903,这就容易多了;只使用wslpath,不需要从Windows共享TMP到WSL,因为Windows端现在可以通过\ WSL $访问WSL文件系统:
[merge]
renormalize = true
guitool = kdiff3
[diff]
tool = kdiff3
[difftool]
prompt = false
[difftool "kdiff3"]
# Unix style paths must be converted to windows path style
cmd = kdiff3.exe \"`wslpath -w $LOCAL`\" \"`wslpath -w $REMOTE`\"
trustExitCode = false
[mergetool]
keepBackup = false
prompt = false
[mergetool "kdiff3"]
path = kdiff3.exe
trustExitCode = false
在Windows更新1903之前
使用安装在Windows 10上的kdiff3作为WSL中git的diff/merge工具的步骤:
将kdiff3的安装目录添加到“Windows Path”中。
将TMP添加到WSLENV Windows环境变量中(WSLENV=TMP/up)。TMP目录将被git用于临时文件,就像以前修订的文件一样,因此该路径必须在windows文件系统上才能工作。
在.bashrc中将TMPDIR设置为TMP:
# If TMP is passed via WSLENV then use it as TMPDIR
[[ ! -z "$WSLENV" && ! -z "$TMP" ]] && export TMPDIR=$TMP
调用kdiff3时,将unix-path转换为windows-path。我的.gitconfig示例:
[merge]
renormalize = true
guitool = kdiff3
[diff]
tool = kdiff3
[difftool]
prompt = false
[difftool "kdiff3"]
#path = kdiff3.exe
# Unix style paths must be converted to windows path style by changing '/mnt/c/' or '/c/' to 'c:/'
cmd = kdiff3.exe \"`echo $LOCAL | sed 's_^\\(/mnt\\)\\?/\\([a-z]\\)/_\\2:/_'`\" \"`echo $REMOTE | sed 's_^\\(/mnt\\)\\?/\\([a-z]\\)/_\\2:/_'`\"
trustExitCode = false
[mergetool]
keepBackup = false
prompt = false
[mergetool "kdiff3"]
path = kdiff3.exe
trustExitCode = false
(当试图从WSL git中找到如何使用kdiff3时,我在这里结束了,并得到了最后的部分,所以我将为其他人发布我的解决方案,同时试图找到答案)
如何使用kdiff3作为WSL git的diff/合并工具
有了Windows更新1903,这就容易多了;只使用wslpath,不需要从Windows共享TMP到WSL,因为Windows端现在可以通过\ WSL $访问WSL文件系统:
[merge]
renormalize = true
guitool = kdiff3
[diff]
tool = kdiff3
[difftool]
prompt = false
[difftool "kdiff3"]
# Unix style paths must be converted to windows path style
cmd = kdiff3.exe \"`wslpath -w $LOCAL`\" \"`wslpath -w $REMOTE`\"
trustExitCode = false
[mergetool]
keepBackup = false
prompt = false
[mergetool "kdiff3"]
path = kdiff3.exe
trustExitCode = false
在Windows更新1903之前
使用安装在Windows 10上的kdiff3作为WSL中git的diff/merge工具的步骤:
将kdiff3的安装目录添加到“Windows Path”中。
将TMP添加到WSLENV Windows环境变量中(WSLENV=TMP/up)。TMP目录将被git用于临时文件,就像以前修订的文件一样,因此该路径必须在windows文件系统上才能工作。
在.bashrc中将TMPDIR设置为TMP:
# If TMP is passed via WSLENV then use it as TMPDIR
[[ ! -z "$WSLENV" && ! -z "$TMP" ]] && export TMPDIR=$TMP
调用kdiff3时,将unix-path转换为windows-path。我的.gitconfig示例:
[merge]
renormalize = true
guitool = kdiff3
[diff]
tool = kdiff3
[difftool]
prompt = false
[difftool "kdiff3"]
#path = kdiff3.exe
# Unix style paths must be converted to windows path style by changing '/mnt/c/' or '/c/' to 'c:/'
cmd = kdiff3.exe \"`echo $LOCAL | sed 's_^\\(/mnt\\)\\?/\\([a-z]\\)/_\\2:/_'`\" \"`echo $REMOTE | sed 's_^\\(/mnt\\)\\?/\\([a-z]\\)/_\\2:/_'`\"
trustExitCode = false
[mergetool]
keepBackup = false
prompt = false
[mergetool "kdiff3"]
path = kdiff3.exe
trustExitCode = false
2021年更新:
在Git 2.33 (Q3 2021)中,在Windows上,mergetool已经被教导查找kdiff3.exe,就像查找winmerge.exe一样。
Git配置全局合并。工具kdiff3就足够了。
参见Michael Schindler提交47eb4c6(2021年6月07日)(michaelcompressconsult)。
(由Junio C Hamano—gitster—在commit b7bd70d中合并,2021年7月8日)
mergetools/kdiff3:让kdiff3也能在Windows上工作
署名:Michael Schindler michael@compressconsult.com
Windows上的git mergetool(man)找不到本地的kdiff3 mergetool。
系统提示“The merge tool kdiff3 is not available as 'kdiff3'”。
就像我们转换二进制文件的名称并在WinMerge的搜索路径上查找它一样,对kdiff3执行相同的操作以找到它。
2018:
为了修正kris的回答,从Git 2.20(2018年第四季度)开始,Git合并工具的正确命令将是
git config --global merge.guitool kdiff3
这是因为“git mergetool”学会了使用“——[no-]gui”选项,就像
“git difftool”可以。
参见刘丹顿(丹顿- l)的commit c217b93, commit 57ba181, commit 063f2bd(2018年10月24日)。
(由Junio C Hamano—gitster—在commit 87c15d1中合并,2018年10月30日)
合并工具:接受-g/——[no-]gui作为参数
与difftool接受-g/——[no-]gui选项的方式一致,使mergetool接受相同的选项以使用merge。Guitool变量来查找默认的mergetool而不是merge.tool。