豊島 @ kako.mu
豊島 @ kako.mu
2003年 7月 2日 (水) 23:34:06 JST
豊島です。 On Wed, 02 Jul 2003 19:53:00 +0900 "Norihiro M." <ryokk****@hi-ho*****> wrote: > 緑啓と申します。 > > CVSを使ったよくある(と思われる)プログラムの保守の方法につい > ての質問です。使用しているのはWinCvs 1.2ごった煮版です。 > > まず、プログラムの基本部分ができたところでブランチを作成します。 > > ブランチ → プログラムの基本部分 > トランク → 今後メインでプログラムを拡張 なんとなく逆なような気がするけど・・・どっちでもいいのか・・・?? > この状態から、普段はトランク側で機能の拡張を行っていき、基本部 > 分に不具合が見つかったときはブランチ側で修正、その後トランクにマ > ージするという方法を考えています。トランク側の変更をブランチ側に > マージすることはありません。 > > この方法で、やや極端ですが、次のような操作を行います。 > > (1) ブランチファイルに行を追加、コミット > (2) トランクファイルにマージ、コミット > (3) (1)で追加したブランチファイルの行を削除、コミット > (4) トランクファイルにマージ > > 要するに、昔追加したブランチファイルの行をトランクファイルにマ > ージした後、「やっぱりここいらないね」と削除した状況です。 > > 期待する動作としては、(4)のマージが終わった時点で、(2)のマージ > で追加された行が削除されてほしいのですが、実際にはこの行は削除さ > れません。 > > いろいろ試したところ、一度マージによって追加された行は、その後 > のマージで削除されることはないようです。 > > おそらくこの動作は仕様だろうと思うのですが、期待する結果を得る > ためにはどのような運用をするべきなのでしょうか。 やりたいことが何となく過去に僕が悩んだことであろうと思うので・・・ (間違ってたらごめんなさい) おそらく、ブランチで編集した分だけどトランクにマージして、トランクで編集したも のはそのままで。ということだと思います。 以下で例を示します。 ブランチを作成するときの基本としては、タグを作ってからそのタグでブランチを作成 してください。※出来る限りタグからブランチを作成してください。 cvs rtag TAG001 module cvs rtag -b -r TAB001 BRN001 module あるとき、BRN001 を本幹(TRUNK)にマージしたい。。となったとき。 まずTRUNKを取り出す。 cvs co module その後、TAG001からBRN001への差分を調べる。 cvs diff -r TAG001 -r BRN001 これがBRN001ブランチで編集してきた差分だけがなのです。 デフォルトオプションだと行数しか無く危険なので cvs diff -r TAG001 -r BRN001 -c | patch ~~ -c を入れると上下の行を含めるので安全。 として、マージにconflictが発生した場合は、.rejになって行くので、これは確認しつ つ手作業でマージする。 以上が、ブランチでの編集分だけをトランクへマージする方法です。 もし、ブランチの作成時にタグを作成せずにブランチだけ作ってしまった場合は、差分 を取るときに、ブランチを作成したときの日時で指定する羽目になります。