合并与关键字(keywords)

如果你要合并的文件中包含关键字[第 12 章],你会得到一大堆冲突,这是因为关键字与合并的版本关联。

因此,你需要指定-kk[替换模式 在 第 12 章]参数在合并的命令行里面。这样只会替换关键字名而不包括里面的值。这个选项认为那些都是相同的,使合并避免产生假的冲突。

例如,假定你有一个这样的文件:

       +---------+
      _! 1.1.2.1 !   <-  br1
     / +---------+
    /
   /
+-----+    +-----+
! 1.1 !----! 1.2 !
+-----+    +-----+

当前你的工作目录在主干上(版本1.2),合并时会得到下面的信息:

$ cat file1
key $Revision: 1.2 $
. . .
$ cvs update -j br1
U file1
RCS file: /cvsroot/first-dir/file1,v
retrieving revision 1.1
retrieving revision 1.1.2.1
Merging differences between 1.1 and 1.1.2.1 into file1
rcsmerge: warning: conflicts during merge
$ cat file1
<<<<<<< file1
key $Revision: 1.2 $
=======
key $Revision: 1.1.2.1 $
>>>>>>> 1.1.2.1
. . .

产生这些信息是由于合并尝试将1.1与1.1.2.1之间的差异合并到你的工作目录。因为版本关键字从Revision: 1.1变为Revision: 1.1.2.1,cvs试图合并这些差异,而事实上仅仅是你的工作目录里面的文件包含了Revision: 1.2

下面是使用-kk后的结果:

$ cat file1
key $Revision: 1.2 $
. . .
$ cvs update -kk -j br1
U file1
RCS file: /cvsroot/first-dir/file1,v
retrieving revision 1.1
retrieving revision 1.1.2.1
Merging differences between 1.1 and 1.1.2.1 into file1
$ cat file1
key $Revision$
. . .

这时在文件中1.1和1.1.2.1版本的关键字使用的是关键字名Revision,因此合并认为没有什么修改,也就不会有冲突产生。

使用合并的-kk参数有一个要留意的地方。因为它会处理所有的cvs关键字,这样对处理使用-kb参数的二进制文件会有问题。因此,在二进制文件处理中应该是解决冲突而不要使用-kk