Shun-ichi GOTO
gotoh****@taiyo*****
2003年 7月 3日 (木) 14:17:03 JST
>>>>> at Thu, 03 Jul 2003 11:09:24 +0900, >>>>> "Norihiro M." <ryokk****@hi-ho*****> said, > どうやらマージした後に、ブランチの最新リビジョンにタグを付け直 > しておいた方がよさそうですね。 それはその通りですが、 > つまるところ、updateコマンドのマージ機能はあてにならんってこと > でしょうかね。(^^; これは違うと思いますよ。 問題となった操作は cvs update -j branch-name かと思うのですが、1回目のmerge でも 2回目のmerge でも上記の -j オプションを1つだけ指定してmerge していませんか? ## 以降はその場合の話です この場合だと、1回目でmerge 済みの差分を2回目でも含めてしまって いるのが問題です。なので2回目は trunk にて cvs update -j last-merged-rev -j branch-name とすべきかと思います。 2回目のmerge において、-j が1つだった場合と2つだった場合の具体的な 違いはオリジナルに対する (1)変更して(2)戻した == 変化なし という操作をmerge することと (2) 戻した という操作をmerge することの違いです。 -j を1つ指定したmerge の動作は、2つの流れの共通部分に遡った、その共通rev のファイルと、-j で指定されたrev と、ローカルファイルと、の3者を使って行 なわれますが、-j 2つ指定した場合は指定rev 間の差分をとり作業ファイルに適 用する、ということをしてくれます。 ## なので、branch の発生した起点を示すタグは必ずしも必要ではありません。 ## でも付けておいた方が、差分を調べたりする時には便利なのでお奨めします。 残念ながらcvs のmerge 機能はどこまでmerge 済みかを管理してはくれないので、 こういうことがおきます。なので、上記のようなupdate 作業を行なえるように、 branch 上でmerge 済みのrevを示すためのタグを付けておく(例えば "last-merged-point" など)と良いでしょう。『これ以前はtrunk にmerge 済み』 ということを示すものを。タグは固定の名称で良く、merge する度に指し示す rev が移動するようにしておいた便利かと思います。 今回の例でいえば操作はこんな感じ? (1) ブランチファイルに行を追加、コミット edit file.txt cvs ci -m "Added a line" file.txt (2) トランクファイルにマージ、コミット cd ../tranck cvs update -j branch cd ../branch-dir cvs tag -F last-merged-point (3) (1)で追加したブランチファイルの行を削除、コミット edit file.txt cvs ci -m "Reverted" (4) トランクファイルにマージ cd ../trunk cvs update -j last-merged-point -j branch cvs ci -m "merged again" --- Regards, Shun-ichi Goto <gotoh****@taiyo*****> R&D Group, TAIYO Corp., Tokyo, JAPAN