git - 使用 ediff 作为 git mergetool

标签 git emacs merge

我希望能够将 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/

相关文章:

git - 在单一存储库中构建微服务的最佳策略是什么?

emacs - 如何减小模式栏/线条的字体大小?

svn merge --dry-run 显示 svn 差异

algorithm - 8个元素的归并排序只需要16次比较怎么办?

python - 合并两个具有时间戳和队列长度的元组列表

git - 跟踪源代码变体

Git:如何在发生更多提交后纠正错误的 merge ?

git - 更改 Android Studio/IntelliJ 的 xcrun 开发者路径

emacs - 如何安装 org-drill?

通过终端 ssh 支持 Emacs 鼠标