如何解决WSL中git difftool路径转换异常的问题?
WSL中Git Difftool调用Beyond Compare路径转换异常的解决方法
问题详情
我的Git Diff相关配置:
mark@L-R910LPKW:~/.kube$ git config --list | grep diff diff.tool=bc3 diff.guitool=bc3 difftool.prompt=false difftool.bc3.path=/mnt/c/Program Files/Beyond Compare 4/BComp.com mark@L-R910LPKW:~/.kube$
Git Merge相关配置:
mark@L-R910LPKW:~/.kube [master ? +1 ~1 -0 !]$ git config --list | grep merge merge.tool=bc3 merge.guitool=bc3 mergetool.prompt=false mergetool.keepbackup=false mergetool.bc3.path=/mnt/c/Program Files/Beyond Compare 4/BComp.com mark@L-R910LPKW:~/.kube [master ? +1 ~1 -0 !]$
在WSL环境下执行git difftool时出现异常,但git diff可正常在控制台输出结果。通过ps查看实际执行的命令:
/tools/init /mnt/c/Program Files/Beyond Compare 4/BComp.com /tmp/maHQTa_config config
发现config文件已被转换为Windows可识别的WSL路径\\wsl.localhost\Ubuntu-20.04\home\mark.kube\config,但临时文件/tmp/maHQTa_config未做路径转换,其对应的正确Windows路径应为\\wsl.localhost\Ubuntu-20.04\tmp\maHQTa_config。
解决方法
该问题可通过自定义路径转换脚本解决,具体步骤如下:
- 创建路径转换脚本
在WSL中创建一个名为bcomp-wrapper.sh的脚本,建议放在/usr/local/bin/目录下,内容如下:
#!/bin/bash # 将WSL路径转换为Windows格式路径 convert_to_win_path() { wslpath -w "$1" } # 处理传入的文件路径 FILE_A=$(convert_to_win_path "$1") FILE_B=$(convert_to_win_path "$2") # 调用Beyond Compare的命令行工具 "/mnt/c/Program Files/Beyond Compare 4/BComp.com" "$FILE_A" "$FILE_B"
- 给脚本添加执行权限
执行以下命令赋予脚本可执行权限:
chmod +x /usr/local/bin/bcomp-wrapper.sh
- 更新Git配置
修改Git的difftool和mergetool配置,将原直接调用BComp.com的路径替换为该脚本路径:
git config --global difftool.bc3.path /usr/local/bin/bcomp-wrapper.sh git config --global mergetool.bc3.path /usr/local/bin/bcomp-wrapper.sh
完成以上配置后,再次执行git difftool时,脚本会自动将所有WSL格式的文件路径转换为Windows可识别的路径,Beyond Compare即可正常加载对比文件。
内容的提问来源于stack exchange,提问作者mark
相关产品推荐
相关产品推荐

