下一个: Merging two revisions, 上一个: Merging a branch, 上层: Branching and merging
继续我们的例子,现在版本树看起来是这样的:
+-----+ +-----+ +-----+ +-----+ +-----+ ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 ! <- The main trunk +-----+ +-----+ +-----+ +-----+ +-----+ ! * ! * ! +---------+ +---------+ Branch R1fix -> +---! 1.2.2.1 !----! 1.2.2.2 ! +---------+ +---------+
正如上面所讨论的,星号线表示从 `R1fix' 分支到主干的合并。
现在我们继续开发 `R1fix' 分支:
+-----+ +-----+ +-----+ +-----+ +-----+ ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 ! <- The main trunk +-----+ +-----+ +-----+ +-----+ +-----+ ! * ! * ! +---------+ +---------+ +---------+ Branch R1fix -> +---! 1.2.2.1 !----! 1.2.2.2 !----! 1.2.2.3 ! +---------+ +---------+ +---------+
然后你可能会希望合并新的变更到主干中去。
如果你仍使用 cvs update -j R1fix m.c
,cvs 将试图合并你已经合并过的东西,这可能导致一些不希望发生的副作用。
因此,你必须指定你只希望把未被合并分支的改变合并进树干。 这样需要使用两个 `-j' 参数,cvs 合并从第一个版本到第二个版本的变化。 例如,在这种情况下最简单的方法应该是
cvs update -j 1.2.2.2 -j R1fix m.c # Merge changes from 1.2.2.2 to the # head of the R1fix branch
用此法的问题是你需要手工指定 1.2.2.2 的版本号。 一个更好的方法是使用最后完成合并的日期:
cvs update -j R1fix:yesterday -j R1fix m.c
在每一次合并进树干后加一个标签给 R1fix 分支,然后就可以使用该标签为以后的合并的方式也挺好:
cvs update -j merged_from_R1fix_to_trunk -j R1fix m.c