You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在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路径,所以得整个小脚本做转换:

  1. 在WSL的用户目录创建meld.sh
    nano ~/meld.sh
    
  2. 把下面的内容粘进去**(注意如果你的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[@]}"
    
  3. 保存退出后,给脚本加执行权限:
    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

火山引擎 最新活动