暗无天日

=============>DarkSun的个人博客

使用Emacs ediff作为git merge工具

之前讲了使用Emacs Ediff作为git diff工具,现在来说说如何用Emacs ediff作为git merge工具

  1. 创建一个脚本来帮助你调用Ediff进行文件比较。

    #!/bin/bash
    
    base=$1
    local=$2
    remote=$3
    merged=$4
    
    if [ -r $base ];then
        emacsclient -a "" -c -n --eval "(require 'ediff)" --eval "(ediff-merge-with-ancestor \"$local\" \"$remote\" \"$base\" nil \"$merged\")"
    else
        emacsclient -a "" -c -n --eval "(require 'ediff)" --eval "(ediff-merge \"$local\" \"$remote\" nil \"$merged\")"
    fi
    

    注意我这里使用了emacsclient ,避免每次都要打开一个Emacs进程。

    emacsclient后面的 -a 参数表示如果没有启动Emacs daemon的话,则自动启动一个。 所以你无需事先启动Emacs daemon。

  2. 用git config配置mergetool

    这里假设上一步创建的脚本为 ~/bin/ediff_merge.sh,那么可以这么配置

    git config --global merge.tool ediff
    git config --global mergetool.ediff.cmd '~/bin/ediff_merge.sh "$BASE" "$LOCAL" "$REMOTE" "$MERGED"'
    git config --global mergetool.prompt false
    # git config --global mergetool.ediff.trustExitCode true
    

OK,这就搞定了,试试运行 git mergetool 看看效果吧。