Emacs中的对比与合并
目录
在ediff会话中
进入ediff会话后,将焦点放在 ediff
导航中进行操作.像这样:
- n/p -下一个不同之处/前一个不同之处
- a - 应用版本a的内容
- b - 应用版本b的内容
- r -还原,撤销A/B块的应用。
- q - 退出 ediff 会话
使用合并冲突标记解决文件中的合并冲突
Emacs自带一个合并冲突的易用接口, 叫做 smerge
(即"simple merge"之意).
当出现合并冲突, Emacs将自动突出显示那些版本控制系统写入源文件中的差异标记。 它将识别哪些部分是“他们的”,哪些是“我的”——以及“祖先”是什么样子的(如果你设置了三路合并)。
要选择下面的版本,我只要把光标放在上面,然后运行 M-x smerge-keep-current
.
告诉Git进行三路对比,而不是双路合并对比
默认情况下,git 在发生合并冲突时使用双路对比 ("我们"文件版本以及"他们"的版本). 然而当解决合并冲突时, 通常还需要查看合并文件两个版本的最新公共祖先.
三路对比特别有用, 你可以通过在 ~/.gitconfig
中添加下面内容来全局性地为所有项目设置成三路对比:
[merge] conflictstyle = diff3
P4 的特定设置
在 .p4enviro
中写入:
P4MERGE=/home/torstein/bin/p4-emacs-merge
在 .emacs
中写入:
(server-start)
在 /home/torstein/bin/emerge
中写入 (Gentoo用户,注意完整的路径;-)
ancestor=$1 theirs=$2 yours=$3 merge_result=$4 emacsclient -e "(ediff-merge-files-with-ancestor "${yours}" "${theirs}" "${ancestor}" () "${merge_result}")" emacsclient "${merge_result}"
p4-emacs-merge的完整源代码可以在这里找到: https://github.com/skybert/my-little-friends/blob/master/bash/vcs/p4-emacs-merge