ノード: 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 を使 わないようにして、コンフリクトは手で直して下さい。