(当试图从 WSL git 中找出如何使用 kdiff3 时,我最终来到了这里并得到了最后的部分,所以我会为其他在试图找到答案时也跌跌撞撞的人发布我的解决方案)
如何使用 kdiff3 作为 WSL git 的 diff/merge 工具
使用 Windows 更新 1903 会容易得多;只需使用 wslpath,无需将 TMP 从 Windows 共享到 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 路径。
- 将 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