我记得前一段时间读过CVS合并实际上是使用diff3算法来执行合并.
这PDF文章的diff3的正式调查,通过Sanjeev卡纳,凯沙夫注:Kunal和本杰明·C·皮尔斯 从宾夕法尼亚任恕详细介绍了diff3的算法.
如果主要关注合并算法本身的属性,而不是它如何与CVS集成.
在回答你的问题时:
从CVS手册页:
-j tag [:date]合并来自tag指定的修订的更改,或者,当指定date并且tag是分支标记时,合并来自分支标记的版本,因为它存在于日期
diff3默认为纯文本差异.它比较(差异)文件的3个版本.
从diff3手册页:
如果`diff3'认为它所比较的任何文件是二进制文件(非文本文件),它通常会报告错误,因为这种比较通常没用.与'diff'一样,您可以强制'diff3'将所有文件视为文本文件,并使用'-a'或'--text'选项逐行比较它们.
根据链接文章,基本版本是文件的两个当前版本(A和B)之间的最后一个通用版本(O).它首先使用2路差分算法来找到O和A,O和B之间最长的公共子序列.
然后(引自文章)它:
...取O与A或B不同的区域并合并重叠的区域,导致图1(c)所示的稳定(所有复制品相等)和不稳定(一个或两个复制品更改)的交替序列0.3最后,它检查在什么每个组块已改变并决定(通过插入4,5),所以这种变化什么变化可以被传播,如图1(d),尤其是圆形,所述第二块处于只改可以传播到B,但是第四个块在A和B中都有变化,所以没有任何东西可以传播.