[CVS超入門] [枝の併合]
またの名をcvs update -j
オプションの使い方。
$Id: cvsmerge.html,v 1.3 2012-10-19 00:25:51+09 kabe Exp $
--- 1.8 --- 1.9 ---------------- \ \ 1.9.2.1 ==取込==> -- (幹の作業領域) \ (ORACLE)枝
枝を生やし、テストを行って とりあえず commit で枝を登録して伸ばしたあと、 幹に取り込みたいという場合。
cvs update
に diff+patchをしてくれる -j
オプションを使います。
-j
は、
# 幹にて作業中 % cvs update -jORACLE tcpconn_ RCS file: /home/kabe/CVSroot/munin.kit/tcpconn_,v retrieving revision 1.9 retrieving revision 1.9.2.1 Merging differences between 1.9 and 1.9.2.1 into tcpconn_ rcsmerge: warning: conflicts during merge % _で 1.9 から 1.9.2.1(現在のORACLE枝の先端) を作業領域(例:幹)にマージします。
$Id$ などは conflict となるので、できたファイルの中の 衝突マーカーを探して始末しておきます。
そのあと普通に commit すればできあがり。
失敗したら、cvs update -A -C
で幹の先端に戻せます。
枝での開発が継続していたので、再度幹に取り込みたい (追っかけ)という場合。
--- 1.8 --- 1.9 ----------------- \ \ 1.9.2.1 ==取込==> 1.10 ---- 1.11 \ \ 1.9.2.2 ====取込====> (幹の作業領域) \ (ORACLE)枝
上で1.11の状態から cvs update -jORACLE してしまうと、 共通の根元の 1.9 から 1.9.2.2 がマージされてしまい、1.9.2.1が 2重適用 になってしまいます。 仕方がないので、版番を明示して取り込みます。
# 幹にて作業中 % cvs update -j1.9.2.1 -jORACLE tcpconn_ RCS file: /home/kabe/CVSroot/munin.kit/tcpconn_,v retrieving revision 1.9.2.1 retrieving revision 1.9.2.2 Merging differences between 1.9.2.1 and 1.9.2.2 into tcpconn_ rcsmerge: warning: conflicts during merge % _「最後に取り込んだ枝の版番」はCVSでは記録も計算もしていないので、 人間が記録しておかないといけません (タグ地図のすすめ)。
ファイル1つならともかく、複数の変更を版番明示で ちくちくと取り込むのは非常に大変ですので、
複数回取り込むかもしれない枝を1回目に取り込んだら、 取込元の枝側 にタグを打っておきます。
1回目の併合時に、たとえば cvs tag -rORACLE MERGE_TRUNK_1
とでもしておけば、2回目の併合では
% cvs update -jMERGE_TRUNK_1 -jORACLEだけで全ファイル取り込めます。
--- 1.8 --- 1.9 ------------ \ \ [MERGE_TRUNK_1] 1.9.2.1 ===> 1.10 ---- 1.11 \ \ 1.9.2.2 =======> 1.12 --- (幹) \ (ORACLE)枝
cvs import でベンダ枝を伸ばす際は、必ず点タグ(release-tags)も 要求されますが、要するにこういった幹への取り込みを やりやすくするためのものです。 人間は「最後に取り込んだベンダ枝の点タグ名」だけ覚えておけばよい。
次回からは悔い改めるとして、
CVSの時刻で版を取り出す機能でなんとかします。
融通の利かないところもありますが。
cvs log ファイル の出力を眺めて、いつ枝を取り込んだか 探します。普段からcommitコメントを入れていない人は懺悔しましょう。
% cvs log -r1.10 tcpconn_ RCS file: /home/kabe/CVSroot/munin.kit/tcpconn_,v Working file: tcpconn_ ... description: ---------------------------- revision 1.10 date: 2006-07-07 04:41:44 +0000; author: kabe; state: Exp; lines: +49 -12 - merge ORACLE branch; ugly and messy =============================================================================
-j
オプションは タグ名:
時刻
で枝上の時刻での指定ができます。
この際はタイムゾーンも指定 すること。
CVSは内部的にはGMTで動いているので
cvs rlog の出力は +0000 となっていますが、コマンドラインは何もなければ
ローカル時刻で解釈されてしまいます。
-j
を2つ指定して、
前回の取り込み時の枝の版と、現在の枝の先端までを
取り込みます。
% cvs update -jORACLE:'2006-07-07 04:41:44 +0000' -jORACLE tcpconn_ RCS file: /home/kabe/CVSroot/munin.kit/tcpconn_,v retrieving revision 1.9.2.1 retrieving revision 1.9.2.2 Merging differences between 1.9.2.1 and 1.9.2.2 into tcpconn_ rcsmerge: warning: conflicts during merge % _
なお、この方法は、「前回併合した枝の版」から「幹に併合した時刻」 の間に枝が修正されていると取り込み損ねが生じます。
Next: ベンダ枝の怪