[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

13. サード・パーティーのソースの追っかけ

あなたのサイトに合わせてプログラムを修正した場合、 そのプログラムの次のリリースにも同じ修正を加えたいでしょう。 CVS を用いてこの作業を自動化することができます。

CVS の用語では、プログラムの開発元をベンダー (vendor) と呼びます。 ベンダーの配布物は、 修正を加えずに ベンダー枝 (vendor branch) という枝に格納します。 CVS はこの為に 1.1.1 という番号を予約しています。

あなたがソースを修正して格納した場合、 そのリビジョンは幹に入ります。 ベンダーから新しいリリースが届いたら、 それをベンダー枝に加えて、修正を幹にコピーします。

ベンダー枝を作り、更新するには、 import コマンドを使用します。 新しいファイルを import すると、 ベンダー枝が ‘先頭’ のリビジョンになり、 checkout する人は誰でもそのリビジョンを取得します。 格納されたローカルな修正は幹に置かれ、 それが ‘先頭’ のリビジョンになります。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

13.1 初めて持ち込む

まず最初に、import コマンドを使ってソースを登録します。 import コマンドでサード・パーティーの追っかけをする場合には、 ベンダー・タグ (vendor tag) と リリース・タグ (release tag) を用いると良いでしょう。 ベンダー・タグは枝のタグ名です (‘-b branch’ フラグを使用しなければ、 枝のリビジョンは常に 1.1.1 です—複数のベンダー枝 参照)。 リリース・タグは特定のリリースを指すタグ名で、 ここでは ‘FSF_0_04’ とします。

import は起動されたディレクトリを変更 しない ことに注意 してください。特に、そのディレクトリが CVS の作業ディレクトリとし て設定されることはありません。ソースに作業をしたいなら、まずそれを持ち 込んで、それから違うディレクトリに取り出してください (see section ソースの取得)。

ディレクトリ ‘wdiff-0.04’ に wdiff というプログラムのソー スがあるとします。将来に新しいリリースがなされたときでも適用したい個人 的な修正を加えようとしています。まず、リポジトリに wdiff のソー スを加えることから始めましょう:

 
$ cd wdiff-0.04
$ cvs import -m "Import of FSF v. 0.04" fsf/wdiff FSF_DIST WDIFF_0_04

上の例では、ベンダー・タグを ‘FSF_DIST’ とし、 唯一のリリース・タグを ‘WDIFF_0_04’ としています。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

13.2 import コマンドで更新する

新しいリリースのソースが届いたら、 それを最初と同じく import コマンドでリポジトリに加えます。 違いは、最初と異なるリリース・タグを用いることだけです。

 
$ tar xfz wdiff-0.05.tar.gz
$ cd wdiff-0.05
$ cvs import -m "Import of FSF v. 0.05" fsf/wdiff FSF_DIST WDIFF_0_05

ファイルがローカルな修正を受けてなければ、 今加えたものが最初のリビジョンになります。 ローカルな変更を加えていれば、 import コマンドは変更を幹にマージするように警告を出し、 ‘checkout -j’ を使うように促します。

 
$ cvs checkout -jFSF_DIST:yesterday -jFSF_DIST wdiff

このコマンドで ‘wdiff’ の最新のリビジョンが取り出され、 ‘yesterday’ 以降にベンダー枝 ‘FSF_DIST’ に加えられた変更を、 作業コピーにマージします。 マージの過程で衝突が起きれば、通常の方法で解決して下さい (see section 衝突の例)。 その後、変更したファイルを格納します。

ただし、上記の例の様に日時を使うよりも、リリースタグを二つ使う方が 良い方法です:

 
$ cvs checkout -jWDIFF_0_04 -jWDIFF_0_05 wdiff

この方が良い理由は、上記の様な日時の使用は、一日に一回しか製品のリリース を import しないと仮定しているからです。 より重要な理由として、リリースタグを使用すると CVS が 二つのベンダーリリース間で削除されたファイルを発見して、 削除のために印を付けることができるというものもあります。 import が削除されたファイルを発見する方法はまったくありませんので、 import に指示されたとき以外もこの方法でマージを行なうべきです。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

13.3 最新のベンダーリリースに戻す

全てのファイルで ‘先頭’ のリビジョンを変更してベンダー枝に戻すことで ローカルの変更を完全に復旧し、最新のベンダーリリースに戻ることができま す。例えば、ソースの取り出したコピーを ‘~/work.d/wdiff’ に置いて いて、そのディレクトリの全てのファイルをベンダーのバージョンに戻したい のなら、次のように入力します:

 
$ cd ~/work.d/wdiff
$ cvs admin -bFSF_DIST .

-bFSF_DIST’ は ‘-b’ の後空白を入れないで指定しなければなりませ ん。See section admin のオプション.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

13.4 cvs import でバイナリ・ファイルを扱う方法

-k’ wrapper 機能オプションを使って、どのファイルがバイナリである かを教えます。See section cvswrappers ファイル.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

13.5 cvs import でキーワード置換を扱う方法

持ち込んでいるソースにキーワードがある場合があります (see section キーワード置換)。例えば、ベンダーは CVS や他の似たキーワード展開構 文を使うシステムを使っているかもしれません。既定の方法でファイルを持ち 込んだだけでは、ベンダーのキーワード展開があなた自身の CVS コピー でも行われます。この情報はベンダーから持ち込んだソースの情報であること がありますから、ベンダーの展開を維持した方がより便利でしょう。

ベンダーのキーワード展開を維持するためには、最初にファイルを持ち込むと きに cvs import に ‘-ko’ オプションを付けます。こうすると、 そのファイルのキーワード展開を完全に止めます。もっと選択的な方法を望む 場合は、cvs updatecvs admin に適切に ‘-k’ オプ ションを使用します。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

13.6 複数のベンダー枝

今までの例はソースを取得しているベンダーは一つだけだと仮定しています。 いろいろな場所からソースを得るような場合もあります。例えば、多くの違っ た人やチームがソフトウェアを修正しているプロジェクトに関係しているとし ます。これを扱う方法はいろいろありますが、たくさんのソースツリーが散ら ばっていて、とりあえずやりたいことはそれら全てを CVS に放り込んで少な くとも一箇所にまとめることだ、ということがあります。

複数のベンダーがある状況を扱うために、cvs import に ‘-b’ オプションを指定できます。その引数は持ち込むベンダー枝です。既定値は ‘-b 1.1.1’ です。

例えば、赤チームと青チームの2つのチームがあり、あなたにソースを送って くるとします。赤チームが努力したものを枝 1.1.1 に持ち込んで、ベンダー タグ RED を使いたいと思っています。青チームが努力したものは枝 1.1.3 に 持ち込んで、ベンダータグ BLUE を使おうとしています。使用するコマンドは 以下のようになります。

 
$ cvs import dir RED RED_1-0
$ cvs import -b 1.1.3 dir BLUE BLUE_1-5

ベンダータグ が ‘-b’ オプションと合わなくても、CVS は発見しないこ とに注意してください。例えば、

 
$ cvs import -b 1.1.3 dir RED RED_1-0

慎重に; この種類の不適当な組合せは混乱や、よりひどいことへの種になりま す。不釣合いを指定することでの便利な使用をここでは考え付きません。もし そのような使用を発見しても、使わないでください。CVS は将来のリリースで はそれをエラーにするでしょう。


[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

This document was generated by Yasutaka SHINDOH on August 8, 2010 using texi2html 1.82.