如果你要合并的文件中包含关键字(参阅 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 关键字行的假性冲突。