关于cvs merge的问题的研究

-----邮件原件-----
主题: 关于cvs merge的问题的研究

上次merge时丢失数据的问题,经过初步研究,我用下面的例子重现了这个现象,并有了初步的结论,请看看。

我以下图为例,框内数字是文件的内容

关于cvs merge的问题的研究

1、当前版本是1.2.2.2时,合并1.8,用-j的操作如下:

cvs -z9 -q update -P -S -j1.8 -- test.txt (in directory E:scm测试机scmtest777)
RCS file: /data/cvsroot/scmtest/777/test.txt,v
retrieving revision 1.2
retrieving revision 1.8
Merging differences between 1.2 and 1.8 into test.txt

***** CVS exited normally with code 0 *****

结果是:

关于cvs merge的问题的研究

可以看出cvs是把1.8和1.2的差异合并到1.2.2.2,现在由于1.8和1.2没有任何差异,所以合并后的结果中没有‘2’。

2、当前版本是1.2.2.2时,合并1.8,用-j -j的操作如下:

cvs -z9 -q update -P -S -j1.2.2.2 -j1.8 -- test.txt (in directory E:scm测试机scmtest777)
RCS file: /data/cvsroot/scmtest/777/test.txt,v
retrieving revision 1.2.2.2
retrieving revision 1.8
Merging differences between 1.2.2.2 and 1.8 into test.txt

***** CVS exited normally with code 0 *****

结果是:
关于cvs merge的问题的研究

可以看出cvs是用1.8替换了1.2.2.2作为合并的结果。

3、当前版本是1.8.2.1时,合并另一分支上的1.2.2.2,用-j 的操作如下:

cvs -z9 -q update -P -S -j1.2.2.2 -- test.txt (in directory E:scm测试机scmtest777)
RCS file: /data/cvsroot/scmtest/777/test.txt,v
retrieving revision 1.2
retrieving revision 1.2.2.2
Merging differences between 1.2 and 1.2.2.2 into test.txt
rcsmerge: warning: conflicts during merge

***** CVS exited normally with code 0 *****

结果是:

关于cvs merge的问题的研究

可以看出cvs是把1.2.2.2和1.2的差异合并到1.8.2.1中。

4、当前版本是1.8.2.1时,合并另一分支上的1.2.2.2,用-j -j的操作如下:

cvs -z9 -q update -P -S -j1.8.2.1 -j1.2.2.2 -- test.txt (in directory E:scm测试机scmtest777)
RCS file: /data/cvsroot/scmtest/777/test.txt,v
retrieving revision 1.8.2.1
retrieving revision 1.2.2.2
Merging differences between 1.8.2.1 and 1.2.2.2 into test.txt

***** CVS exited normally with code 0 *****

结果是:

关于cvs merge的问题的研究

可以看出cvs是用1.2.2.2替换了1.8.2.1作为合并的结果。

结论:

cvs支持的是分支的差异合并,不支持2个独立文件的合并。

为了支持我们现有的开发模式和习惯,我们需要找一个linux环境下的字符方式的第三方合并工具以代替cvs merge,但现在还没找到这样的工具。

转载于:https://my.oschina.net/tadcat/blog/147642