ノード:Branches And Keyword Expansion -- Natural Enemies, 前:The Flying Fish Approach -- A Simpler Way To Do It, 上:Going Out On A Limb (How To Work With Branches And Survive)



Branches And Keyword Expansion - Natural Enemies

ファイルに RCS キーワードがあると、ブランチ上とトランク上では違った ように展開されるので、マージするたびににせのコンフリクトが起こること になります。何も変更していなくてもキーワードはオーバラップし、展開結 果は一致しません。例えば README.txt に、トランクではこのように書いて あるとします

$Revision: 1.14 $

ブランチ上ではこうです

$Revision: 1.14.2.1 $

マージを実行した時に、以下のようなコンフリクトが起こるでしょう:

floss$ cvs update -j Exotic_Greetings-branch
RCS file: /usr/local/newrepos/myproj/README.txt,v
retrieving revision 1.14
retrieving revision 1.14.2.1
Merging differences between 1.14 and 1.14.2.1 into README.txt
rcsmerge: warning: conflicts during merge
floss$ cat README.txt
 ...
<<<<<<< README.txt
key $Revision: 1.14 $
=======
key $Revision: 1.14.2.1 $
>>>>>>> 1.14.2.1
 ...
floss$

こうならないようにするために、マージ時に一時的に -kk オプション(何の 略なのか知らないんですが、多分 "kill keywords" かな?)を渡して展開を 抑制することができます:

floss$ cvs update -kk -j Exotic_Greetings-branch
RCS file: /usr/local/newrepos/myproj/README.txt,v
retrieving revision 1.14
retrieving revision 1.14.2.1
Merging differences between 1.14 and 1.14.2.1 into README.txt
floss$ cat README.txt
 ...
$Revision$
 ...
floss$

しかし、気をつけることがひとつだけあります: -kk を使うと、そのファイ ルに設定してあるほかのキーワード展開モードを上書きしてしまいます。特 にバイナリファイルにおいては問題になります。バイナリファイルは普通 -kb になっているからです(-kb はキーワード展開と行末コード変換を全て 抑制します)。ブランチからバイナリファイルをマージする時には -kk を使 わないようにして、コンフリクトは手で直して下さい。