キーワードを含むファイルをマージすると (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’ を使用するよりは、衝突に対処する必 要があるでしょう。