下一个: , 上一个: Merging a branch, 上层: Branching and merging


5.7 从一个分支多次合并

继续我们的例子,现在版本树看起来是这样的:

     +-----+    +-----+    +-----+    +-----+    +-----+
     ! 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.ccvs 将试图合并你已经合并过的东西,这可能导致一些不希望发生的副作用。

因此,你必须指定你只希望把未被合并分支的改变合并进树干。 这样需要使用两个 `-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