之前讲了 使用 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
这就搞定了,试试运行 git mergetool 看看效果吧。

