キーワードを含むファイルをマージすると (see Keyword substitution、 通常マージの間に数多くの衝突が起こります。なぜなら、キーワードはマージ 中のリビジョンで違う様に展開されているからです。
ですから、しばしばマージのコマンド行で `-kk' (see Substitution modes) スイッチを指定したいと思うでしょう。キーワードの展開された値を 展開するのでは無く、キーワードの名前だけを置換することによって、このオ プションはマージしているリビジョンがそれぞれ同じことを確実にして、見せ かけの衝突を回避します。
例えば、このようなファイルがあるとしましょう:
+---------+
_! 1.1.2.1 ! <- br1
/ +---------+
/
/
+-----+ +-----+
! 1.1 !----! 1.2 !
+-----+ +-----+
そして、作業ディレクトリは現在幹 (revision 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
. . .
これで起こったことは、merge が 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' を使用するよりは、衝突に対処する必 要があるでしょう。