如果你要合并的文件中包含关键字(参阅 Keyword substitution),你会得到一大堆冲突, 这是因为关键字与合并的版本关联。
因此,你需要在合并的命令行里面指定 `-kk'(参阅 Substitution modes) 开关。 用只替换关键字名而不是其展开的值的办法,这个选项确保正合并的版本互相是是相同的, 从而避免产生假的冲突。
例如,假定你有一个这样的文件:
+---------+
_! 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,因此把
它们之间的改变合并进工作目录不需要改变什么。也就不会有冲突产生。
警告: 在 cvs 1.12.2 之前的版本中,合并时使用 `-kk' 会有严重的 问题。那就是 `-kk' 会跨越任何仓库中归档文件中设置的默认关键字扩展模式。 对一些用户很不幸,这会造成二进制文件(默认关键字扩展模式设置为 `-kb')的损坏。 因此,当仓库中包含二进制文件时,解决冲突必须使用手工修改的方法来替代合并命令中的 `-kk'。
在 cvs 1.12.2 之后的版本中,命令行对任何 cvs 命令提供的关键字扩展模式 不再跨越为二进制文件设置的 `-kb' 关键字扩展模式,然而它还是将跨越其它默认 关键字扩展模式。现在即使仓库中包含二进制文件,你也可以在合并中安全地使用 `-kk' 来防止含有 RCS 关键字行的假性冲突。