如何在WSL2中使用Meld作为Git合并/差异工具?含Windows端调用方案
WSL2中配置Git使用Windows原生Meld作为diff/merge工具
我之前刚折腾完这个配置,踩了路径转换的小坑,给你整理了一步步可落地的步骤:
先确认基础条件
- Windows端已经装好了Meld(默认安装路径是
C:\Program Files\Meld\Meld.exe,如果装在别的地方记好路径) - WSL2(Ubuntu)里的Git已经正常可用
第一步:写个路径转换脚本
WSL用的是Linux风格路径,但Windows的Meld只认Windows路径,所以得整个小脚本做转换:
- 在WSL的用户目录创建
meld.sh:nano ~/meld.sh - 把下面的内容粘进去**(注意如果你的Meld不是默认路径,要修改
WIN_MELD那行)**:#!/bin/bash # 替换成你Windows端Meld的实际路径 WIN_MELD="/mnt/c/Program Files/Meld/Meld.exe" ARGS=() # 遍历所有参数,把Linux路径转成Windows路径 for arg in "$@"; do if [[ "$arg" == /* ]]; then ARGS+=("$(wslpath -w "$arg")") else ARGS+=("$arg") fi done # 启动Windows的Meld "$WIN_MELD" "${ARGS[@]}" - 保存退出后,给脚本加执行权限:
chmod +x ~/meld.sh
第二步:配置Git用这个脚本当工具
配置差异对比工具(difftool)
执行下面的命令做全局配置(如果只想给当前仓库配置,去掉--global就行):
# 告诉Git我们的Meld脚本在哪 git config --global difftool.meld.path ~/meld.sh # 取消每次调用difftool时的烦人的确认提示 git config --global difftool.prompt false # 设置默认的diff工具为Meld git config --global diff.tool meld
配置合并工具(mergetool)
同样执行全局配置命令:
# 指定mergetool用我们的脚本 git config --global mergetool.meld.path ~/meld.sh # 取消合并时的确认提示 git config --global mergetool.prompt false # 关键:设置不依赖Meld的退出码判断合并完成(Windows程序的退出码和Git预期的不太一样) git config --global mergetool.meld.trustExitCode false # 设置默认的merge工具为Meld git config --global merge.tool meld
验证一下配置
- 测试difftool:随便找个Git仓库,执行
git difftool HEAD~1,应该会弹出Windows的Meld显示文件差异 - 测试mergetool:故意造个合并冲突(比如本地改个文件,远程也改同一个地方,拉取后就有冲突),然后执行
git mergetool,Meld会弹出来让你解决冲突
小提示
- 如果Meld装在D盘,比如
D:\Apps\Meld\Meld.exe,那脚本里的WIN_MELD要改成/mnt/d/Apps/Meld/Meld.exe wslpath是WSL自带的命令,要是没有的话,建议更新一下WSL到最新版本
内容的提问来源于stack exchange,提问作者Qtax




