我希望能够将 ediff 与“git mergetool”一起使用。
我发现了一些修改源代码的补丁,我不想这样做。相反,我想在我的 .gitconfig 中添加 ediff 支持。
我知道 git 内置了对 emerge 的支持,但我更喜欢 ediff。
我试图将这些行添加到我的 .gitconfig 中:
[mergetool "ediff"]
cmd = emacs --eval "(ediff-merge-files-with-ancestor \"$LOCAL\" \"$REMOTE\" \"$BASE\" nil \"$MERGED\")"
但是当我尝试使用“git mergetool --tool=ediff”运行它时,我得到了这个:
eval: 1: Syntax error: "(" unexpected
我做错了什么?
最佳答案
我使用了一个更复杂的命令。据我所知,我是从这个线程http://kerneltrap.org/mailarchive/git/2007/6/28/250230得到的(可能与您所指的相同)。
[mergetool.ediff]
cmd = emacs --eval \"\
(progn\
(defun ediff-write-merge-buffer ()\
(let ((file ediff-merge-store-file))\
(set-buffer ediff-buffer-C)\
(write-region (point-min) (point-max) file)\
(message \\\"Merge buffer saved in: %s\\\" file)\
(set-buffer-modified-p nil)\
(sit-for 1)))\
(setq ediff-quit-hook 'kill-emacs\
ediff-quit-merge-hook 'ediff-write-merge-buffer)\
(ediff-merge-files-with-ancestor \\\"$LOCAL\\\" \\\"$REMOTE\\\"\
\\\"$BASE\\\" nil \\\"$MERGED\\\"))\"
请注意,我将它分成几行以提高可读性并使用 \
转义换行符,因此 git config 将其视为单行。
我通常使用 emacsclient 来编辑,例如提交消息。不幸的是,上面的 mergetool 配置没有使用 emacsclient,当我试图让它与 emacsclient 一起工作时,我遇到了各种问题,包括 emacsclient 立即返回的事实。
但是你刚刚提醒了我那个问题,所以我可能会尽快解决这个问题。但是,如果其他人已经找到了一个很好的解决方案;-)
关于git - 使用 ediff 作为 git mergetool,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1817370/