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

A. CVS のコマンド便覧

この付録は CVS コマンドの全体構造の説明をし、いくつかのコマンドは 詳しく説明します (他のものは別のところで説明されています。CVS コ マンドの簡単な便覧は、see section CVS コマンドの簡単な便覧)。


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

A.1 CVS コマンド構造の全て

CVS のコマンド全体の書式を示します:

 
cvs [ cvs_options ] cvs_command [ command_options ] [ command_args ]
cvs

CVS プログラムの名前です。

cvs_options

CVS のサブコマンド全体に適用されるオプションです。以下で説明され ています。

cvs_command

いくつかの違ったサブコマンドの一つです。 幾つかのコマンドでは別名が使用できます。別名はそのコマンドの便覧マニュ アルのところで書かれています。 次の二つの場合にだけ ‘cvs_command’ を省略できます。 つまり ‘cvs -H’ として利用可能なコマンドのリストを得る場合か、 ‘cvs -v’ として CVS 自身のバージョン情報を得る場合です。

command_options

コマンド固有のオプションです。

command_args

コマンドの引数です。

不幸な事に、 cvs_optionscommand_options の間で幾つか混乱があります。 オプションの中には cvs_option として使われたときにはいくつかのコマンドに のみ影響します。command_option として使されたときは、違う意味に なる可能せいがり、より多くのコマンドで使用できます。 つまり、上の分類をあまり深刻に受けとめないでくだ さい。代わりに文書を見るようにしましょう。


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

A.2 CVS の終了状態

CVS はそれ呼んだ環境に 終了状態 (exit status) を設定するこ とで、成功したか失敗したかを示すことができます。 終了状態を調べる正確な方法はオペレーティング・システムごとに異なります。 例えば、unix のシェルスクリプトでは、最後のコマンドが成功終了状態を返 せば変数 ‘$?’ は0で、終了状態が失敗を示していれば、0より大きくな ります。

CVS が成功した場合は、成功状態を返します。エラーがあれば、エラーメッセー ジを印字して、失敗状態を返します。cvs diff コマンドはこの例外で す。違いが見つからなければ成功状態を返し、違いが見つかるか、エラーが発 生したときに失敗状態を返します。この振舞いはエラーの検知には良くないの で、将来では cvs diff が他の CVS コマンドと同じように振舞 うように変更される可能性があります。


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

A.3 既定オプションと ~/.cvsrc ファイル

よく使用する command_option が幾つかあり、 そのオプションを必ず指定するように設定したいことがあります。 例えば (実際に .cvsrc を実装した要因の一つですが) 多くの人には ‘diff’ の既定出力は大変読みにくく、 context 形式か unidiff 形式のほうが遥かに分かりやすいでしょう。

シェル・スクリプトやエイリアスに頼らなくても、 ‘~/.cvsrc’ ファイルを用いて cvs_commands 各々に 既定のオプションを加えることができます。

~/.cvsrc’ の書式は簡単です。 実行された cvs_command と同じ名前で始まる行が検索されます。 一致した行を発見したら、行の残りの部分をオプションに分割し (空白のとこ ろで)、 コマンド行からのオプションを与える前に、 得られたオプションをコマンドの引数として与えます。 コマンドが別名を持つ場合 (例えば、checkoutco)、 コマンド行で使われるものとは限りませんが、公的な名前がファイルとの 合致時に使用されます。 例えば ‘~/.cvsrc’ の内容が次の様であった場合:

 
log -N
diff -uN
rdiff -u
update -Pd
checkout -P
release -d

cvs co foo’ も、コマンド ‘cvs checkout foo’ と同様に ‘-P’ が引数として与えられます。

上記の例では ‘cvs diff foobar’ の出力は unidiff 形式になります。 ‘cvs diff -c foobar’ だと指定通り context 形式になります。 ‘diff’ には "古い" 形式で出力するためのオプションが無いため、 "古い" 形式を使いたい場合には少し面倒ですが ‘cvs -f diff foobar’ とする必要があります。

コマンド名の部分に cvs と記述すれば、 広域オプションを指定することができます (see section 広域オプション)。 例えば ‘.cvsrc’ 中の以下の行は、

 
cvs -z6

CVS が圧縮レベル 6 を用いるように指定しています。


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

A.4 広域オプション

cvs_options’ (‘cvs_command’ の左側に与えられる) として利用できるものを以下に示します:

--allow-root=rootdir

正しい CVSROOT ディレクトリを指定します。パスワード認証のためのサーバの設定 参照。

-a

クライアントとサーバの全ての通信を認証します。CVS クライアントで だけ意味をもちます。これを書いている時点では、GSSAPI 接続を行う場合だ けに実装されています (see section GSSAPI による直接接続)。認証は流れている TCP 接続のハイジャックというような攻撃から身を守ることができます。 認証を使用しても暗号化は使用されません。

-b bindir

CVS 1.9.18 以前では、これは RCS プログラムが bindir ディ レクトリにあることを指定していました。現在のバージョンの CVSRCS プログラムを実行しません。互換性のためにこのオプションがあり ますが、指定しても何もしません。

-T tempdir

一時ファイルが置かれるディレクトリを tempdir とします。 環境変数 $TMPDIR の設定や、 コンパイル時のディレクトリ設定よりも優先されます。 この値は絶対パス名で指定して下さい。 (クライアント/サーバとして動作しているときは、‘-T’ はローカルのプロセスのみに 影響します。クライアントに ‘-T’ を指定してもサーバは影響を受けませんし、 同様にサーバに指定してもクライアントは影響を受けません。)

-d cvs_root_directory

リポジトリのルートディレクトリのパス名を cvs_root_directory とし ます。 環境変数 $CVSROOT よりも優先します。See section リポジトリ.

-e editor

リビジョンのログ情報の入力に editor を使用します。 環境変数 $CVSEDITOR$EDITOR よりも優先します。 詳しい情報は 変更の格納 参照。

-f

~/.cvsrc’ を読みません。 このオプションが最も良く使われるのは、 CVS のオプション設定に直交性がない時です。 例えば ‘cvs log’ のオプション ‘-N’ (タグの表示を抑制します) に対応する表示を行なうオプションはありません。 従って、‘~/.cvsrc’ の ‘log’ エントリに ‘-N’ があったとき、 タグを表示するには ‘-f’ を使用する他ありません。

-H
--help

指定された ‘cvs_command’ の使用法を表示します (コマンドが実際に実行されることはありません)。 コマンド名を指定しない場合には、 ‘cvs -H’ は他のヘルプオプションの一覧などを含む、CVS の全体 のヘルプを表示します。

-n

ファイルを更新しません。 ‘cvs_command’ を実行した場合の表示だけが行なわれます。 既存のファイルを削除, 更新, マージしたり、 新しいファイルを作成することはありません。

CVS は必ずしも ‘-n’ を付けなかったときと全く同じ出力をするわ けではないことに注意してください。ときどき、出力が同じ場合がありますが、 他の場合では、CVS は正確に同じ出力をするために必要な実行を飛ばし ます。

-Q

コマンドの出力が完全に抑止され、 重大な問題が発生した場合にのみ出力が行なわれます。

-q

コマンドの出力を減らします。 再帰的にサブディレクトリを辿る時の報告などの補助情報は抑止されます。

-r

新たな作業ファイルを読み込み専用にします。 環境変数 $CVSREAD を設定するのと同じ効果があります (see section CVS に影響する全ての環境変数)。 既定では、そのファイルが監視されてない限り作業ファイルへの書き込みが許 可されます (see section ファイル編集者の追跡機構)。

-s variable=value

ユーザ変数を設定します (see section 管理用ファイルにおける変数展開)。

-t

プログラムの実行状態をトレースします。 CVS が実行する各ステップの情報を表示します。 ‘-n’ オプションと共に使用し、 不慣れなコマンドの潜在的な影響を調べるのに便利です。

-v
--version

CVS のバージョンと著作権情報を表示します。

-w

新しい作業ファイルを読み書き可能にします。 環境変数 $CVSREAD の設定を無効にします。 $CVSREAD が設定されておらず、 ‘-r’ オプションも無い場合には、 作成されるファイルは読み書き可能とされます。

-x

クライアントとサーバ間の全ての通信を暗号化します。これは CVS クラ イアントでだけ意味を持ち、また現時点では GSSAPI 接続を用いる場合 (see section GSSAPI による直接接続) かケルベロス接続 (see section ケルベロスによる直接接続) を用いる場合にしか実装されていません。暗号化を使用する ということは送信されるメッセージも認証されるということです。既定状態で は暗号化機能は使用できません。特別に ‘--enable-encryption’ を指定 して CVS を構築する必要があります。

-z gzip-level

圧縮レベルを設定します。 CVS クライアントでだけ意味を持ちます。


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

A.5 共通のコマンド・オプション

ここでは、複数の CVS コマンドで共通に使用できる ‘command_options’ について説明します。 これらのオプションは、 必ず ‘cvs_command’ の右側に付けられます。 以下に示すオプションは、全てのコマンドで使えるわけではありません。 各オプションは、それが意味をなすコマンドにおいてのみ使用可能です。 しかし以下のオプションを持つコマンドがあるならば、 そのオプションは他のコマンドのものと同じ動作であると考えて良いでしょう。 (各コマンドの固有オプションのほとんどは、 他の CVS コマンドのものとは異なる意味を持っています。)

注意: ‘history’ コマンドは例外です。このコマンドには、 ここに示す標準オプションと重複する固有オプションが多くあります。

-D date_spec

date_spec 以前のリビジョンのうち、最新のものを使用します。 date_spec には、過去の日付を示すものを一つだけ指定します。

このオプションを用いて作業ファイルを取り出すと、 指定した日付が貼り付けられます。 つまり ‘-D’ オプションの引数が記録され、 これ以後の update の際に同じ日付が用いられます (貼り付いたタグ/日付についての詳細は see section 貼り付いたタグ)。 ‘-D’ は以下のコマンドで利用できます: annotate, checkout, diff, export, history, rdiff, rtag, update. (history コマンドはこのオプションを少し違った方法で使用します。 see section history のオプション).

CVS では、様々な形式で日付を指定できます。 最も標準的なものは (International Standards Organization による) ISO8601 と (RFC 822 で規定され、RFC1123 で修正された) Internet e-mail の標準です。

ISO8601 はいろんな異種があります。すこし例を挙げます:

 
1972-09-24
1972-09-24 20:05

ISO8601 の日付様式にはいろいろなものがあり、CVS はそれらの多くを受け付 けますが、おそらくながーい話し全部を聞きたいとは思わないでしょ う :-)。

Internet e-mail で使用が認められている日付に加えて、 CVS では、いくつかのフィールドが省略されたものも使えます。 例えば、以下のようなものです:

 
24 Sep 1972 20:05
24 Sep

特定の標準時が指定されていない場合は、日付はローカルの標準時として解釈 されます。

この2つの書式の使用が好まれます。しかし、CVS は今は他の日付の書式 を幅広く受け付けます。それらはここでは故意に詳しくは説明されておらず、 CVS の将来のバージョンはそれら全ては受け付けないかもしれません。

そのような書式の中に //. というものがあります。 これは月と日が逆の順番になっているものに慣れている人を混乱させます。 ‘1/4/96’ は1月4日であり、4月1日ではありません。

シェルは空白を引数の区切りにするので、 ‘-D’ の引数を引用符で囲むのを忘れてはいけません。 ‘-D’ オプションを付けたコマンド行は、次の様になるでしょう:

 
$ cvs diff -D "1 hour ago" cvs.texinfo
-f

日付やタグ名を指定して CVS コマンドを用いた場合、 そのタグ名を持たない (その時には存在しなかった) ファイルは、 普通は無視されます。 タグでも日付でも引っ掛からなかったファイルを復元したい場合に、 ‘-f’ オプションを使用します (そのファイルの最新のリビジョンが取り出されます)。

-f’ のときでさえ、指定したタグは存在していなければならないことに 注意してください (すなわち、必ずしも全てのファイルというわけではなく、 いくつかのファイルにおいて)。 これは CVS が、名前の入力を間違えた ときにエラーを出すことを続けられるようにするためです。

-f’ は以下のコマンドで利用できます: annotate, checkout, export, rdiff, rtag, update.

警告: commitremove コマンドにも ‘-f’ オプションがありますが、異なる動作をします。See section commit のオプション, ファイルを削除する 参照。

-k kflag

既定のキーワード置換モードを変更します。 kflag の詳細は 置換モード 参照。

このオプションを用いて作業ファイルを取り出すと、 kflag貼り付けられます。 つまり、このオプションを checkoutupdate コマンドに 用いた場合、CVS は指定した kflag をそのファイルに結合します。 これ以後、同ファイルに対する update コマンドには kflag が使用され続けます。 この効果は別の指定を行なうまで止みません。

-k’ オプションは以下のコマンドで利用できます: add, checkout, diff, import, update.

-l

Local の頭文字です。再帰的にサブディレクトリを辿らず、 カレントディレクトリでのみコマンドを実行します。

以下のコマンドで利用できます: annotate, checkout, commit, diff, edit, editors, export, log, rdiff, remove, rtag, status, tag, unedit, update, watch, and watchers.

-m message
-m message

エディタを起動せず、ログ情報を message に記述します。

以下のコマンドで利用できます: add, commit, import.

-n

タグプログラムを実行しません。 各コマンド実行時のプログラムは、 管理用ファイル ‘modules’ に記述できます (see section The modules file)。 つまり、このオプションは ‘modules’ の記述を無効にします。

注意: ‘cvs_command’ の左側に指定する ‘cvs -n’ と混同しないようにして下さい。

以下のコマンドで利用できます: checkout, commit, export, rtag.

-P

空のディレクトリを削除 (prune) します。ディレクトリを削除する 参照。

-p

リポジトリから取得したファイルを、カレントディレクトリに置かず、 標準出力に送り (pipe) ます。

以下のコマンドで利用できます: checkout, update.

-R

再帰的にディレクトリを辿って実行します。これは指定しなくても実行されま す。

以下のコマンドで使用可能です: annotate, checkout, commit, diff, edit, editors, export, rdiff, remove, rtag, status, tag, unedit, update, watch, watchers.

-r tag

既定の先頭 (head) リビジョンの代りに、 引数 tag で指定されたリビジョンを使用します。 tagrtag コマンドで任意に定義されたタグの他に、 二つの特別なタグ ‘HEAD’ と ‘BASE’ が常に利用できます。 ‘HEAD’ は、リポジトリにある最新のリビジョンを参照します。 ‘BASE’ は、作業コピーの由来となるリビジョンを参照します。

タグを指定して checkoutupdate コマンドを実行し、 自分の作業ファイルを作った場合、そのタグは貼り付けられます。 つまりこのタグが記録され、以後他のものを指定するまで update に同じタグが使われ続けます (貼り付いたタグ/日付についての詳細は see section 貼り付いたタグ)。

tag には、タグ–文字によるリビジョン で説明されているような文字列や、 枝とマージ で説明されているような枝の名前のどちらであ ることもできます。

コマンド・オプション ‘-r’ と一緒に 広域オプション ‘-q’ を指定すると、 RCS ファイルが指定したタグを含まない場合に、 警告出力が抑止されるので便利です。

注意: ‘cvs_command’ の左側に指定する ‘cvs -r’ と混同しないようにして下さい!

-r’ は以下のコマンドで利用できます :checkout, commit, diff, history, export, rdiff, rtag, update.

-W

フィルタを適用したいファイルを指定します。 フィルタを適用したいファイルが複数あるときは、 このオプションを何個並べても構いません。 ファイル ‘.cvswrappers’ での指定方法と同じ形式で指定します。

以下のコマンドで利用できます: import, update.


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

A.6 admin—管理

これは雑多な管理機構への CVS のインターフェースです。CVS で は役に立つか疑わしいようなものもありますが、歴史的な互換性の目的のため に存在しています。このコマンドは必ず再帰的に動作するため、使用 の際には細心の注意を払って下さい。

Unix ではグループ名 cvsadmin が存在する場合、 そのグループの一員だけが cvs admin を利用できます (誰にで実行できる cvs admin -k コマンドを除きます)。 このグループはサーバ側か、非クライアント/サーバの CVS を実行してい る全てのシステムで存在している必要があります。 その名前で無人のグループを作成すれば、 cvs admin の使用を全面的に禁止できます。 NT では、cvsadmin 機能は存在せず、全ての使用者が cvs admin を実行できます。


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

A.6.1 admin のオプション

これらのオプションの中には CVS での有用性に疑問符が付くものもあり ますが、歴史的な互換性のために存在しています。中には、効果を解除するま で、CVS を使えなくなるものもあります!

-Aoldfile

CVS では使用されません。oldfile の利用者一覧を、 指定した RCS ファイルの利用者一覧に追加します。

-alogins

CVS では使用されません。RCS ファイルの利用者一覧に、 logins で指定された利用者を追加します。 logins はカンマで区切った利用者の一覧です。

-b[rev]

既定の枝を rev に設定します。CVS では、普通は既定の枝は操作 しません。貼り付いたタグ (see section 貼り付いたタグ) を使うのがどの枝で作業 をするかを決める良い方法です。cvs admin -b を実行する理由は一つ だけあります: ベンダー枝を使用しているときに、ベンダーのバージョンに戻 すため、です (see section 最新のベンダーリリースに戻す)。‘-b’ と引数の間に 空白があってはいけません。

-cstring

註釈符を string にします。註釈符は現在のバージョンの CVS で も、RCS 5.7 でも使用されていません。ですから、心配する必要は全く ありません。See section キーワード置換.

-e[logins]

CVS では使用されません。logins に含まれる利用者を、 RCS ファイルの利用者一覧から削除します。 logins が省略された場合は、利用者一覧を全て削除します。 ‘-e’ と引数の間に空白があってはいけません。

-I

標準入力が端末でない場合でも対話的に動作します。 このオプションはクライアント/サーバの CVS では動作せず、将来の CVS のリリースからは消えるでしょう。

-i

CVS では無意味です。これはリビジョンを作成することなく、新しい RCS ファイルを作成して、初期化します。CVS では、cvs add コマンドでファイルを加えてください (see section ディレクトリにファイルを加える)。

-ksubst

既定のキーワード置換モードを subst にします。See section 置換モード. ここで既定とした方法よりも、 cvs update, cvs export, cvs checkout での ‘-k’ オプションが優先されます。

-l[rev]

リビジョン rev をロックします。 枝番号が与えられた場合、その枝の最新リビジョンをロックします。 rev が省略された場合は、 既定の枝の最新リビジョンをロックします。 引数 と ‘-l’ の間にスペースがあってはいけません。

CVS のソース配布物の中の ‘contrib’ ディレクトリの中に、 ‘rcslock.pl’ という名前のスクリプトがあります。 これを用いて上記のロック状態を、 CVS における独占取得 (一時に一人だけがファイル編集可能な状態) に置き換えることができます。 詳細はスクリプトの註釈を参照して下さい (寄贈物の支援と権利の放棄声明文が書かれたファイル ‘README’ も一読して下さい)。 その註釈によれば、厳格ロックモード (既定) に設定しておく必要があります。

-L

厳格にロックを求める設定 (厳格ロックモード) にします。 厳格ロックモードだと、RCS ファイルの所有者であっても、 ロックしていないファイルは格納できません。 CVS で使用する場合は、厳格ロックモードにする必要があります。 上記 ‘-l’ オプションの説明も参照して下さい。

-mrev:msg

リビジョン rev のログ・メッセージを msg に替えます。

-Nname[:[rev]]

これ以前の name の設定を無効にすることを除けば、 ‘-n’ と同じように働きます。 魔法の枝での使用法は 魔法の枝番号 を参照してください。

-nname[:[rev]]

枝またはリビジョン rev にタグ名 name を付けます。 通常は ‘cvs tag’ か ‘cvs rtag’ を代わりに用いると良いでしょう。 ‘:’ と rev の両方を省略すると、タグ名が削除されます。 また name が既に使用されていた場合は、 エラー・メッセージが出力されます。 rev がタグ名のときは、相当する番号に置換されます。 枝番号の後に ‘.’ を付けて rev に指定した場合、 その枝の現時点での最新リビジョンになります。 ‘:’ だけで rev を指定しなかった場合、 既定の枝 (通常は幹) の現時点での最新リビジョンになります。 例えば ‘cvs admin -nname: RCS/*’ は、 指定された全ての RCS ファイルの、 現時点での最新リビジョンに name というタグ名を付けます。 一方 ‘cvs admin -nname:$ RCS/*’ では、 各作業ファイルのキーワード文字列に含まれる リビジョンに name というタグ名を付けます。

-orange

range の範囲のリビジョンを消去 (過去のものにする) します。

このコマンドは何をしているかを 正確に 知っていないと非常に危険 であることに注意してください (例えば、以下の rev1:rev2 と いう構文がいかに間違いやすいかという警告を読んでください)。

ディスクの容量が少ないなら、このオプションは役に立つかもしれません。し かし、使う前によく考えてください—このコマンドを取り消すためには最後 のバックアップで復元するしかありません! 不注意や、(天が禁止している) CVS のバグによって、計画していたものと違うリビジョンを消してしまったら、 リビジョンが消去される前のエラーを修正する機会はありません。おそらく、 まずリポジトリのコピーで試すというのは良い考えでしょう。

以下のどれかで range を指定します:

rev1::rev2

CVS が rev1 から rev2 に関連付けられた差分だけを保存し、間の段階を保存 しないように、rev1 と rev2 間の全てのリビジョンを壊します。例えば、 ‘-o 1.3::1.5’ の後では、リビジョン 1.3, リビジョン 1.5, 1.3 から 1.5 の差分を取得することができますが、リビジョン 1.4 や 1.3 と 1.4 の 差分を取得することはできません。他の例です: ‘-o 1.3::1.4’ と ‘-o 1.3::1.3’ は間に消去するリビジョンが無いので、何の効果もあり ません。

::rev

rev のある枝と rev 自身の間のリビジョンを壊します。枝の始 点と rev はそのまま残ります。例えば、‘-o ::1.3.2.6’ はリビ ジョン 1.3.2.1, リビジョン 1.3.2.5, とその間の全てのものを消去しますが、 1.3 と 1.3.2.6 はそのまま残します。

rev::

revrev のある枝の最後との間のリビジョンを壊します。リ ビジョン rev はそのまま残りますが、先頭のリビジョンは消去されま す。

rev

リビジョン rev を消去します。例えば、‘-o 1.3’ は ‘-o 1.2::1.4’ と等価です。

rev1:rev2

同じ枝の rev1 から rev2 のリビジョンを、それを含めて消去し ます。rev1rev2 やその間の全てのリビジョンを取得するこ とはできなくなります。例えば、コマンド ‘cvs admin -oR_1_01:R_1_02 .’ はほとんど役に立ちません。それは、タグ R_1_02 までのリビジョンを、 それを含めて消去するということです。でも注意してください! R_1_02 と R_1_03 で変更されていないファイルがあれば、そのファイルはタグ R_1_02 と R_1_03 で同じ数値リビジョン番号になっています。ですから、 R_1_02 を取得できなるだけではありません。R_1_03 もテープから復元しなけ ればならなくなります! たいていの場合、代わりに rev::rev2 と指定しようと思うでしょう。

:rev

rev のある枝の最初から、rev までのリビジョンを、それを含め て消去します。

rev:

rev のある枝の最後から、rev までのリビジョンを、それを含め て消去します。

消去されるべきリビジョンは全て枝やロックを持っていてはいけません。

消去されるべきリビジョンにタグ名があり、‘::’ 構文のどれかを指定 すると、CVS はエラーを出して、どのリビジョンも消去されません。タ グ名とリビジョンの両方を消去したいなら、まず cvs tag -d でタグ 名を消去し、それから cvs admin -o を実行します。‘::’ でな い構文をいてい すると、CVS はリビジョンを消去しますが、タグ名を存 在しないリビジョン指すタグ名として残します。この振舞いは CVS の以 前のバージョンとの互換性のために残されています。しかし、これは便利では ありませんので、将来は ‘::’ の場合と同様の振舞いに変更されるかも しれません。

CVS が枝を扱う方法のために、rev は、もし枝であれば名前で指 定することはできません。説明は、See section 魔法の枝番号.

だれも壊したリビジョンのコピーを取り出していないことを確認してください。 誰かがそれを編集して、格納し直そうとすると、変なことが起こります。この ため、このオプションは無駄な格納を戻すためには良い方法ではありません。 代わりにその変更を元に戻すための新しいリビジョンを格納してください (see section 二つのリビジョン間の差分をマージする)。

-q

簡素な (quiet) 表示、つまり実行時に診断情報を表示しません。

-sstate[:rev]

CVS でも使用します。 リビジョン rev の状態を識別する文字列を state にします。 rev が枝番号の場合、その枝の最新リビジョンの状態を変更します。 rev を省略すると、既定の枝の最新リビジョンを変更します。 state には、どのような文字列を用いても構いません。 通常使用されるのは、‘Exp’ (実験段階), ‘Stab’ (安定動作), ‘Rel’ (出荷済) といった組み合わせです。 既定では、新しく作成されたリビジョンの状態は ‘Exp’ にされます。 各リビジョンの状態は、‘cvs log’ (see section log—ファイルのログ情報を表示) の出力や、 キーワード ‘$Log$’, ‘$State$’ (see section キーワード置換) の内容で確認できます。 ここで、CVSdead という状態を 独自の目的で用いることに注意して下さい。 dead 状態を扱う際には、cvs removecvs add といったコマンドを使用し、 ‘cvs admin -s’ を使用してはいけません。

-t[file]

CVS でも使用します。 RCS ファイルの説明文を file の内容に書き換えます。 file のパス名は ‘-’ で始まってはいけません。 各ファイルの説明文は ‘cvs log’ (see section log—ファイルのログ情報を表示) の出力で確認できます。 ‘-t’ と引数の間に空白があってはいけません。

file が省略された場合、標準入力が用いられ、 ファイル終端 (EOF) もしくは ‘.’ のみの行で終了します。 対話的動作が可能なら入力促進も可能です。‘-I’ を参照してださい。 クライアント/サーバの CVS では標準入力からの読み込みは動作せず、 将来の CVS のリリースでは変更されるかもしれません。

-t-string

-tfile’ と同様です。 RCS ファイルの説明文を string に書き換えます。 ‘-t’ と引数の間に空白があってはいけません。

-U

厳格にはロックしない設定 (非厳格ロックモード) にします。 非厳格ロックモードだと、RCS ファイルの所有者ならば、 ロックしていないファイルも格納できます。 CVS で使用する場合は、厳格ロックモードにする必要があります。 上記 ‘-l’ オプションの説明も参照して下さい。

-u[rev]

このオプションを CVS で使用する際の説明は、 上記 ‘-l’ オプションを参照して下さい。 リビジョン rev のロックを解除します。 枝を指定した場合、その枝の最新リビジョンのロックを解除します。 rev を省略すると、その人物が行なった最後のロックを解除します。 通常は、ロックを掛けた人物だけがロックを解除できます。 誰か他の人物がロックを解除した場合には、ロックを破壊します。 この場合、元々ロックを掛けていた人に commit 通知メール が送られます (see section 誰に通知するか CVS に教える)。 ‘-u’ とその引数の間に空白があってはいけません。

-Vn

前のバージョンの CVS ではこのオプションはバージョン nRCS ファイルが認識できる RCS ファイルを書くことを意味してい ましたが、今は旧式となり、それを指定するとエラーを起こします。

-xsuffixes

前のバージョンの CVS では、これは RCS ファイルの名前を指定す るための方法として説明されていました。しかし、CVS は常に CVS で使用される RCS ファイルは ‘,v’ で終わることを要求してきま したので、このオプションは今まで役に立ったことはありません。


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

A.7 annotate—各行がどのリビジョンが更新されたか?

files のファイルに対して、各行に幹のヘッドリビジョンと 最後の修正に関する情報を不可して表示します。


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

A.7.1 annotate オプション

annotate では、以下の標準オプションが利用できます (完全な記述は see section 共通のコマンド・オプション):

-l

Local、つまり現在の作業ディレクトリでのみコマンドが 実行されます。

-R

ディレクトリを再帰的に格納します。

-f

指定したタグや日付が見付からなかった場合、 最も新しいリビションを取り出します。

-F

バイナリファイルにも annotate による注釈を付けます。

-r revision

指定されたリビジョンかタグのファイルを annotate します。

-D date

指定された日時のファイルを annotate します。


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

A.7.2 annotate 例

例えば:

 
$ cvs annotate ssfile
Annotations for ssfile
***************
1.1          (mary     27-Mar-96): ssfile line 1
1.2          (joe      28-Mar-96): ssfile line 2

ファイル ‘ssfile’ は今、二行あります。 ssfile line 1 は5月27日に mary により 格納されました。そして、5月28日に、joessfile line 1 行を変更せずに ssfile line 2 を追加しました。 この報告は削除されたり置き換えたりされた行については何も 報せません。そのためには cvs diff を使う必要があります (see section diff—リビジョン間の差分の表示)。

cvs annotate のオプションの一覧は CVS コマンドの簡単な便覧 にあり、 それらを使って annotate するファイルやリビジョンを選択することができます。 オプションは 共通のコマンド・オプション でより詳しく説明されています。


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

A.8 checkout—編集の為にソースを取り出す

modules で指定されたモジュールの作業ディレクトリを作成、 もしくは更新し、 その中にソース・ファイルをコピーします。 CVS のほとんどのコマンドは作業ディレクトリを扱うものなので、 まず checkout を実行しておく必要があります。

modules は、 リポジトリ中のディレクトリやファイルへの相対パスだけでなく、 ディレクトリやファイルの集合に対する別名でも構いません。 別名は管理用ファイル ‘modules’ で定義します See section The modules file.

指定したモジュールにもよりますが、 checkout は再帰的にディレクトリを作成し、 そこに適切なソース・ファイルを入れていきます。 そして (他の開発者が各自のコピーを編集しているかどうかに関わらず)、 好きなときに自分のソース・ファイルを編集し、 他人の変更を取り入れるために更新したり、 自分の変更をリポジトリに反映するために格納したりします。

checkout で作成されるディレクトリに注意して下さい。 最上位のディレクトリは、 必ず checkout を実行したディレクトリに追加され、 通常は指定したモジュールと同じ名前になります。 モジュールに別名が定義されている場合、 サブディレクトリは違う名前になりますが心配は要りません。 checkout の処理中、各ファイルを作業領域に展開したと同時に その相対パスが表示されますから、 この表示でサブディレクトリを確認して下さい (広域オプション ‘-Q’ を付けた場合は表示がありません)。

CVS にオプション ‘-r’ が付けられた場合 (see section 広域オプション)、 環境変数 CVSREAD が設定されていた場合 (see section CVS に影響する全ての環境変数)、 ファイルが監視されていた場合 (see section ファイル編集者の追跡機構) を除いて、 checkout が作成するファイルは読み書き可能な状態になります。

checkout で作成したディレクトリの上で、 再度 checkout を実行しても構わないということに注意してください。 これはリポジトリに作成された新しいディレクトリが作業領域に現れるという 点で、update コマンドに ‘-d’ オプションを付けるのと同様の 効果があります。しかし、update は引数にディレクトリ名を取ります が、checkout は引数にモジュール名を取ります。checkout を この様に使うためには、最上位のディレクトリから実行しなければなりません ので (普段 checkout を実行する場所です)、存在するディレクトリを 更新するために checkout を実行する前に、ディレクトリを最上位の ディレクトリに変更することを忘れないでください。

checkout コマンドの出力は update の出力 を参照して下さい。


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

A.8.1 checkout のオプション

checkout では、以下の標準オプションが利用できます (完全な記述は see section 共通のコマンド・オプション):

-D date

date 以前の最も新しいリビジョンを取り出します。 このオプションは貼り付けられ、 勝手に ‘-P’ オプションも実行されます。 貼り付いたタグ/日付についての詳細は See section 貼り付いたタグ.

-f

-D date’ や ‘-r tag’ と一緒に指定します。 指定したリビジョンが見付からなかった場合、 (そのファイルを無視せずに) 最も新しいリビションを取り出します。

-k kflag

キーワード置換モードを kflag に指定します。 詳細は 置換モード を参照。 このオプションは貼り付けられます。つまりこれ以後、 この作業ディレクトリでファイルが更新されるときには、 同じ kflag が使用され続けます。 status コマンドを用いて 貼り付いたオプションを見ることができます。 status コマンドの情報は CVS コマンドの簡単な便覧 を参照してください。

-l

Local、つまり現在の作業ディレクトリでのみコマンドが 実行されます。

-n

ファイルを取り出したとき、普段は実行されるプログラムを実行しません。 このプログラムは管理用ファイル ‘modules’ の オプション ‘-o’ で指定されます (see section The modules file)。

-P

空になったディレクトリを削除 (prune) します。ディレクトリの改名と移動 を参照してください。

-p

ファイルを標準出力に送り (pipe) ます。

-n

モジュールプログラムを実行しません。

-R

ディレクトリを再帰的に取り出します。このオプションは指定しなくても実行 されます。

-r tag

tag で指定されたリビジョンを取り出します。 このオプションは貼り付けられ、 ‘-P’ オプションも勝手に実行されます。 貼り付いたタグ/日付についての詳細は See section 貼り付いたタグ.

さらに checkout では次の固有オプションも使用可能です:

-A

全ての貼り付いたタグや日付、 また ‘-k’ オプションの指定を剥がします。 貼り付いたタグ/日付についての詳細は 貼り付いたタグ を参照してくだ さい。

-c

管理用ファイル ‘modules’ の内容を、 アルファベット順に並べて標準出力に出します。 作業ディレクトリは全く変更されません。

-d dir

モジュール名を使用する代りに dir というディレクトリを作成します。 一般的に、このフラグは ‘mkdir dir; cd dir’ の後に ‘-d’ フラグ無しで checkout コマンドを実行することと同じです。

しかし、重要な例外があります。単独の項目を取り出しているときには、出力 に間に空のディレクトリが無いディレクトリが現れた方がとても便利です。こ の場合のみCVS は空のディレクトリを避けるためにパス名を “短く” します。

例えば、ファイル ‘bar.c’ がある ‘foo’ というモジュールがある とすると、コマンド ‘cvs co -d dir foo’ はディレクトリ ‘dir’ を作成し、中に ‘bar.c’ を置きます。同様に、サブディレクトリ ‘baz’ があり、その中に ‘quux.c’ のあるモジュール ‘bar’ があるとすると、コマンド ‘cvs co -d dir bar/baz’ はディレクトリ ‘dir’ 作成し、その中に ‘quux.c’ を置きます。

-N’ フラグを使うと、この振舞いは抑制されます。上と同じモジュール の定義で、‘cvs co -N -d dir foo’ はディレクトリ ‘dir/foo’ を 作成してその中に ‘bar.c’ を置き、‘cvs co -N -d dir bar/baz’ はディクトリ ‘dir/bar/baz’ を作成してその中に ‘quux.c’ を置 きます。

-j tag

-j’ オプションを二つ指定した場合、 最初に指定したリビションから次に指定したリビジョンへの変更を、 作業ディレクトリにマージします。

-j’ オプションが一つの場合、 その分岐リビジョンから指定したリビジョンへの変更を、 作業ディレクトリにマージします。 分岐リビジョンとは、作業ディレクトリの元になったリビジョンと、 ‘-j’ で指定したリビジョンとの共通の祖先です。

-j’ オプションに枝を指定する場合、 日付の指定を付加することができます。 このとき選択されるリビジョンは、指定日以前のものに制限されます。 日付の指定は、タグ名の後のコロン (:) に続けて記述します: ‘-jSymbolic_Tag:Date_Specifier’。

See section 枝とマージ.

-N

-d dir’ と併用した場合にのみ有効です。 このオプションを指定した場合、 単独モジュールを取り出したときに、 作業ディレクトリのモジュールパスを “短く” しません。例と説明は ‘-d’ フラグを参照してください。

-s

-c’ と同様ですが、全てのモジュールの状態を アルファベット順に並べて標準出力に出します。 モジュールの状態を設定するために管理用ファイル ‘modules’ の中で使 われるオプション ‘-s’ の情報は、See section The modules file.


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

A.8.2 checkout の使用例

モジュール ‘tc’ のコピーを取り出します:

 
$ cvs checkout tc

モジュール ‘tc’ を昨日の状態で取り出します:

 
$ cvs checkout -D yesterday tc

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

A.9 commit—ファイルをリポジトリに格納する

commit は、作業ファイルに対する変更を リポジトリに組み入れる際に使用します。

格納するファイルを特に指定しなければ、 現在の作業ディレクトリの全ファイルが調査され、 変更が加えられたファイルだけがリポジトリに格納されます。 既定 (もしくは明示的にオプション ‘-R’ が指定された場合) では、 サブディレクトリのファイルも調査され、変更されていれば格納されます。 オプション ‘-l’ を指定して、 commit の動作を現在のディレクトリだけに留めることも可能です。

commit は、選択されたファイルが リポジトリの最新リビジョンであるかどうか確認します。 指定されたファイルの中に update (see section update—作業コピーをリポジトリと一致させる) が必要なものが一つでもあれば、その旨が表示され、 格納せずに終了します。 commit はあえて update コマンドを呼び出さず、 開発者自身に適切な時期を判断してもらいます。

全てが正常ならば、ログ・メッセージを記すためにエディタが起動されます。 ログ・メッセージは幾つかの処理プログラムに送られると同時に (The modules file管理用ファイル Loginfo を参照)、 リポジトリ中の RCS ファイルにも記録されます。 このログ・メッセージを参照するには log コマンドを 用いて下さい。log—ファイルのログ情報を表示 参照。 オプション ‘-m message’ で コマンド行にログ・メッセージを記述したり、 オプション ‘-F file’ で ログ・メッセージを記述したファイルを指定すれば、 エディタを起動しなくて済みます。


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

A.9.1 commit のオプション

commit では、以下の標準オプションが利用できます (完全な記述は see section 共通のコマンド・オプション):

-l

Local、つまり現在の作業ディレクトリでのみコマンドが 実行されます。

-n

モジュールのプログラムを実行しません。

-R

ディレクトリを再帰的に格納します。 このオプションは指定しなくても実行されます。

-r revision

revision に格納します。 revision には、枝もしくは、 既存の全てのリビジョン番号よりも大きい番号を持つ 幹上のリビジョンを指定しなくてはいけません (see section リビジョンの割当て)。 枝上のリビジョンを指定して格納することはできません。

さらに commit では以下のオプションも使用可能です:

-F file

エディタを起動せず file からログ・メッセージを読み込みます。

-f

これは 共通のコマンド・オプション のオプション ‘-f’ に記述される 標準的な動作とは異なることに注意して下さい。

作業ファイルに何も変更を加えていない場合でも、 無理矢理新しいリビジョンとして格納します。 現在の file のリビジョンを 1.7 と仮定したとき、 次の二つのコマンドの実行結果は同じになります:

 
$ cvs commit -f file
$ cvs commit -r 1.8 file

-f’ オプションは再帰を使いません (すなわち、‘-l’ を含んでい ます)。全てのサブディレクトリの全てのファイルの新しいリビジョンの格納 を CVS 強制するには、‘-f -R’ を使用する必要があります。

-m message

エディタを起動せず、message をログ・メッセージとします。


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

A.9.2 commit の使用例


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

A.9.2.1 枝に対して格納する

オプション ‘-r’ を用いて、枝リビジョン (リビジョン番号が 偶数個のドットを含むもの) に格納することができます。 枝リビジョンは rtagtag コマンドに オプション ‘-b’ を指定して作成します (see section 枝とマージ)。 そして checkoutupdate で、 新しく作成した枝からソースを取り出します。 その結果、この作業ソースに対する変更を commit すると、 全て自動的に枝リビジョンの方に追加され、 幹の開発系統は全く影響を受けません。 例えば、バージョン 1.2 の製品に対するパッチを作成する必要があるけれど、 既にバージョン 2.0 の開発が始まっているような場合、 以下のようにします:

 
$ cvs rtag -b -r FCS1_2 FCS1_2_Patch product_module
$ cvs checkout -r FCS1_2_Patch product_module
$ cd product_module
[[ hack away ]]
$ cvs commit

オプション ‘-r’ は作業ディレクトリに貼り付けられるため、 これを指定する必要はありません。


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

A.9.2.2 編集後に枝を作成する

例えば、先週取り出したリビジョンを元にして、 極めて実験的な変更をソフトウェアに加えてきたとします。 ここで実験に他の開発者を加えたいけれど、 幹の開発系統を妨げたくない場合は、 その変更点を新しい枝に格納すれば良いでしょう。 すると他の開発者も実験中のコードを取り出して、 CVS の衝突解決の恩恵を全て受けることができます。 このシナリオは次のようになるでしょう:

 
[[ hacked sources are present ]]
$ cvs tag -b EXPR1
$ cvs update -r EXPR1
$ cvs commit

update コマンドで、全てのファイルに オプション ‘-r EXPR1’ が貼り付けられます。 このとき、update コマンドでは ファイルに対する変更が削除されないことに注意して下さい。 ‘-r’ が貼り付けられているため、 commit すれば自動的に正しい枝に変更が格納されます。 これは次の手順もあります:

 
[[ hacked sources are present ]]
$ cvs tag -b EXPR1
$ cvs commit -r EXPR1

しかしこの場合、 変更されていたファイルだけに ‘-r EXPR1’ が貼り付けられます。 従って別のファイルを変更して、フラグ ‘-r EXPR1’ を付けずに 格納した場合、誤って幹に格納されてしまいます。

他の開発者が実験に参加する際には、 単純に以下のようにして下さい:

 
$ cvs checkout -r EXPR1 whatever_module

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

A.10 diff—リビジョン間の差分の表示

diff コマンドは、 別々のリビジョン間の差異を比較するのに使用します。 特にオプションを指定しない場合、 作業ファイルをその由来となったリビジョンと比較し、 検出された全ての差異を報告します。

ファイル名を指定した場合、そのファイルについてのみ比較します。 ディレクトリを指定した場合、その下の全てのファイルを比較します。

diff の終了状態は他の CVS コマンドと違います。詳細は CVS の終了状態 を参照してください。


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

A.10.1 diff のオプション

diff では、以下の標準オプションが利用できます (完全な記述は see section 共通のコマンド・オプション):

-D date

date 以前の最も新しいリビジョンを利用します。 このオプションを比較に用いた時の効果は ‘-r’ を参照して下さい。

-k kflag

kfalg に従ってキーワード置換を行います。キーワード置換, 参照。

-l

Local、つまり現在の作業ディレクトリでのみコマンドが 実行されます。

-R

ディレクトリを再帰的に調べます。 このオプションは指定しなくても実行されます。

-r tag

リビジョン tag と比較します。 オプション ‘-r’ は最大二つまで使用できます。 オプション ‘-r’ を指定しない場合、 作業ファイルをその由来となったリビジョンと比較します。 オプション ‘-r’ を一つ指定した場合、 指定したリビジョンと作業ファイルとを比較します。 オプション ‘-r’ を二つ指定した場合、 指定した二つのリビジョンを比較します (作業ファイルが結果に影響を与えることはありません)。

一つもしくは両方のオプション ‘-r’ を、前述の オプション ‘-D date’ と交換することができます。

以下のオプションは出力の書式を指定します。 意味は GNU diff と同じです。 ほとんどのオプションは ‘-’ の後に続く一文字と、 ‘--’ の 後に続く長い名前の二つの同じ意味の名前あります。

-lines

(整数) lines 行の文脈を表示します。このオプション自身は 出力フォーマットを指定しません。‘-c’ や ‘-u’ とともに使われないと 効果はありません。このオプションは旧式です。patch 適切な動作のために 少なくとも2行文脈を必要とします。

-a

テキストでなさそうなファイルだったとしても、 すべてのファイルをテキストとして扱い、行単位で比較します。

-b

行の最後の空白を無視し、他の複数の空白の連続を一つのものとみなします。

-B

空行を挿入もしくは削除するだけの変更を無視します。

--binary

データをバイナリモードで読み書きします。

--brief

違いの詳細を報告せず、ファイルが異なるかどうかだけを報告します。

-c

コンテキスト出力フォーマットを使います。

-C lines
--context[=lines]

コンテキスト出力フォーマットを使い、(整数) lines 行の文脈もしくは lines が指定されていないときは3行の文脈を使います。 patch 適切な動作のために 少なくとも2行文脈を必要とします。

--changed-group-format=format

両方のファイルで違う行のグループの if-then-else 形式での出力に format を使います。See section 行グループフォーマット.

-d

あるかもしれないより少ない変更を見つけるためにアルゴリズムを変更します。 これは diff を遅く (ときには非常に遅く) します。

-e
--ed

出力を正しい ed スクリプトにします。

--expand-tabs

入力ファイルのタブ揃えを維持するために出力中のタブを空白に変換します。

-f

出力を ed スクリプトのようなものにしますが、変更の順番を ファイルでの順番にします。

-F regexp

コンテキストとユニファイフォーマットのときに、各々の違いの塊に対して、 regexp にマッチする直前のいくつかの行を表示します。

--forward-ed

出力を ed スクリプトのようなものにしますが、変更の順番を ファイルでの順番にします。

-H

多くの少ない変更がいろいろなところにある多きなファイルをの扱いを 速くするためにヒューリスティクスを使います。

--horizon-lines=lines

共通の接頭辞を持つ最後の lines 行と共通の接尾辞を持つ最初の lines 行 を無視しません。

-i

大文字小文字の区別を無視します。

-I regexp

regexp にマッチする行の挿入もしくは削除だけの変更を無視します。

--ifdef=name

マージされた if-then-else 出力が name を使うようにします。

--ignore-all-space

行を比較するときに空白を無視します。

--ignore-blank-lines

空行を挿入もしくは削除するだけの変更を無視します。

--ignore-case

大文字小文字の区別を無視します。

--ignore-matching-lines=regexp

regexp にマッチする行の挿入もしくは削除だけの変更を無視します。

--ignore-space-change

行の最後の空白を無視し、他の複数の空白の連続を一つのものとみなします。

--initial-tab

通常のフォーマットもしくはコンテキストフォーマットのテキストの行の前に 空白の代わりにタブを表示します。これは行のタブ揃えが普通に見えるように します。

-L label

コンテキストフォーマットとユニファイフォーマットのヘッダに ファイル名の代わりに label を使います。

--label=label

コンテキストフォーマットとユニファイフォーマットのヘッダに ファイル名の代わりに label を使います。

--left-column

横に並べたフォーマットのときに共通の行は左のコラムしか出力しないようにします。

--line-format=format

すべての入力行の if-then-else 形式での出力に format を使います。See section 行フォーマット.

--minimal

あるかもしれないより少ない変更を見つけるためにアルゴリズムを変更します。 これは diff を遅く (ときには非常に遅く) します。

-n

RCS 形式の diff を出力します。各コマンドが影響する行数を指定する以外は ‘-f’ と同じです。

-N
--new-file

ディレクトリの比較において、ファイルが一つのディレクトリだけで 見つかった場合、他のディレクトリでは空のファイルが存在しているものとして 扱います。

--new-group-format=format

if-then-else フォーマットのときに、2番目のファイルからのみの行のグループの 出力に format を使います。See section 行グループフォーマット.

--new-line-format=format

if-then-else フォーマットのときに、2番目のファイルからのみの行の 出力に format を使います。See section 行フォーマット.

--old-group-format=format

if-then-else フォーマットのときに、1番目のファイルからのみの行のグループの 出力に format を使います。See section 行グループフォーマット.

--old-line-format=format

if-then-else フォーマットのときに、1番目のファイルからのみの行の 出力に format を使います。See section 行フォーマット.

-p

各変更がどの C 関数に属するかを表示します。

--rcs

RCS 形式の diff を出力します。各コマンドが影響する行数を指定する以外は ‘-f’ と同じです。

--report-identical-files
-s

二つのファイルが同一であったときに報告します。

--show-c-function

各変更がどの C 関数に属するかを表示します。

--show-function-line=regexp

コンテキストとユニファイフォーマットのときに、各々の違いの塊に対して、 regexp にマッチする直前のいくつかの行を表示します。

--side-by-side

横に並べた出力フォーマットを使います。

--speed-large-files

多くの少ない変更がいろいろなところにある多きなファイルをの扱いを 速くするためにヒューリスティクスを使います。

--suppress-common-lines

横に並べた出力フォーマットのときに、共通する行を出力しません。

-t

入力ファイルのタブ揃えを維持するために出力中のタブを空白に変換します。

-T

通常のフォーマットもしくはコンテキストフォーマットのテキストの行の前に 空白の代わりにタブを表示します。これは行のタブ揃えが普通に見えるように します。

--text

テキストでなさそうなファイルだったとしても、 すべてのファイルをテキストとして扱い、行単位で比較します。

-u

ユニファイ出力形式を使います。

--unchanged-group-format=format

if-then-else フォーマットのときに両方のファイルからの共通行のグループを format を使って出力します。See section 行グループフォーマット.

--unchanged-line-format=format

if-then-else フォーマットで両方のファイルで共通の行を format を 使って出力します。See section 行フォーマット.

-U lines
--unified[=lines]

ユニファイ出力フォーマットを使い、(整数) lines 行の文脈もしくは lines が指定されていないときは3行の文脈を使います。 patch 適切な動作のために 少なくとも2行文脈を必要とします。

-w

行を比較するときに空白を無視します。

-W columns
--width=columns

横に並べるフォーマットのときに、幅 columns を出力に使います。

-y

横に並べた出力フォーマットを使います。


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

A.10.1.1 行グループフォーマット

行グループフォーマットはプログラム言語やテキストフォーマット言語を 含む、if-then-else 入力を受け付ける多くのアプリケーションに適しています。 行グループフォーマットは同様の行の連続したグループの出力フォーマットを 指定します。

例えば、以下のコマンドは TeX ファイル ‘myfile’ をリポジトリの 同じファイルと比較し、古い範囲を ‘begin{em}’-‘end{em}’ 行で 囲み、新しい範囲が ‘begin{bf}’-‘end{bf}’ で囲んで マージされたファイルに出力します。

 
cvs diff 
   --old-group-format='begin{em}
%<end{em}
' 
   --new-group-format='begin{bf}
%>end{bf}
' 
   myfile

次のコマンドは上の例と等価ですが、デフォルトの行グループフォーマットも 指定しているため、より冗長になっています。

 
cvs diff 
   --old-group-format='begin{em}
%<end{em}
' 
   --new-group-format='begin{bf}
%>end{bf}
' 
   --unchanged-group-format='%=' 
   --changed-group-format='begin{em}
%<end{em}
begin{bf}
%>end{bf}
' 
   myfile

これはより高度な例で、diff の一覧を行数が「普通の英語」形式に なっているヘッダとともに出力します。

 
cvs diff 
   --unchanged-group-format='' 
   --old-group-format='-------- %dn line%(n=1?:s) deleted at %df:
%<' 
   --new-group-format='-------- %dN line%(N=1?:s) added after %de:
%>' 
   --changed-group-format='-------- %dn line%(n=1?:s) changed at %df:
%<-------- to:
%>' 
   myfile

行グループフォーマットを指定するには、以下のオプションのどれかを使います。 各行グループの種類に対して一つ、最大で四つまでの行グループフォーマットを 指定することができます。format はシェルメタ文字を含むことが多いので 引用符で囲むようにしてください。

--old-group-format=format

これらの行グループは最初のファイルからの行のみを含む塊です。 変更されたグループフォーマットが指定されていれば デフォルトの古いグループのフォーマットはそれになります。 指定されていなければ、行グループはそのまま出力されます。

--new-group-format=format

これらの行のグループは2番目のファイルからのみの行の塊です。 変更されたグループフォーマットが指定されていれば デフォルトの新しいグループのフォーマットはそれと同じです。 指定されていなければ、行グループはそのまま出力されます。

--changed-group-format=format

これらの行グループは両方のファイルからの行の塊です。 デフォルトの変更されたグループフォーマットは古いものと新しいものの フォーマットを繋げたものです。

--unchanged-group-format=format

これらの行グループは両方のファイルに共通する行です。 デフォルトの未変更グループフォーマットは行グループをそのまま出力します。

行グループフォーマットでは普通の文字は文字自身を現します。 変換の指定は ‘%’ で始まり、以下のどれかの形式になります。

%<

最後の改行を含む、最初のファイルからの行です。 各行は古い行フォーマットに従って整形されます (see section 行フォーマット)。

%>

最後の改行を含む、2番目のファイルからの行です。 各行は新しい行フォーマットに従って整形されます。

%=

最後の改行を含む、両方のファイルに共通の行です。 各行は未変更行フォーマットに従って整形されます。

%%

文字 ‘%’ を現します。

%c'C'

C が一文字のときは、C を現します。 C はバックスラッシュや引用符であってはなりません。 例えば、‘%c':'’ はコロンを現します。これは 通常コロンがその部分を終了させる if-then-else フォーマットの then 部分であっても コロンになります。

%c'O'

O が1、2、3文字の8進数からなる文字列のきは、8進コード O の 文字を現します。例えば、‘%c'0'’ はヌル文字を現します。

Fn

Fprintf 変換指定フォーマットで n が以下の文字であるとき、 n の値を F を使って整形します。

e

古いファイルの該当グループの直前の行番号です。

f

古いファイルの該当グループの最初の行番号です。 e + 1 と同じ値になります。

l

古いファイルの該当グループの最後の行番号です。

m

古いファイルの該当グループの最後の直後の行番号です。 l + 1 と同じ値になります。

n

古いファイルの該当グループの行数です。l - f + 1 と 同じ値になります。

E, F, L, M, N

同様に、新しいファイルでの行です。

printf 変換指定は ‘%d’、‘%o’、‘%x’、‘%X’ を 指定することができ、それぞれ10進、8進、小文字の16進、大文字の16進の出力を 意味します。‘%’ の後で、以下のオプションを書くこができます: ‘-’ は左揃え、整数はフィールドの最小幅、ピリオドの後に 数字 (省略可能) は最小限の桁数をそれぞれ意味します。 例えば、‘%5dN’ はグループの改行5文字の幅のフィールドに printf のフォーマット "%5d" を使って表示します。

(A=B?T:E)

AB が等しければ T、そうでなければ E です。 AB は10進の定数か、上記のように解釈される一文字です。 このフォーマット指定は A の 値と B の値が等しいときは B を、そうでないときは E を指定したのと等価になります。

例えば、 ‘%(N=0?no:%dN) line%(N=1?:s)’ は N (新しいファイルの グループの改行に数) が 0 であれば ‘no lines’ と等価であり、 N が 1 であれば ‘1 line’ に、そうでない場合は ‘%dN lines’ に なります。


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

A.10.1.2 行フォーマット

行フォーマットは入力ファイルからの各行が if-then-else フォーマットの 行グループの一部として出力されるかを制御します。

例えば、以下のコマンドはテキストの左に一列変更を示す文字を追加して 出力します。出力の最初の列は削除された行は ‘-’ 、追加された行は ‘|’、未変更の行は空白になります。出力中に改行が望ましい場所では フォーマットは改行を含みます。

 
cvs diff 
   --old-line-format='-%l
' 
   --new-line-format='|%l
' 
   --unchanged-line-format=' %l
' 
   myfile

行フォーマットの指定には以下のオプションのどれかを使います。 format はシェルメタ文字を含むことが多いので 引用符で囲むようにしてください。

--old-line-format=format

最初のファイルからの行だけをフォーマットします。

--new-line-format=format

2番目のファイルからの行だけをフォーマットします。

--unchanged-line-format=format

両方のファイルに共通の行をフォーマットします。 formats lines common to both files.

--line-format=format

すべての行をフォーマットします。要するに、上の三つのオプションを同時に 設定します。

行フォーマットでは、普通の文字は文字自身を現します。 変換の指定は ‘%’ で始まり、以下のどれかの形式になります。

%l

(もしあったとしても) 最後の改行を除いた、行の内容になります。 このフォーマットは行が終了しているかどうかは無視します。

%L

(もしあれば) 最後の改行を含む、行の内容になります。 行が終了していなければ、このフォーマットはその状態を保ちます。

%%

%’ を現します。

%c'C'

C が一文字のときは、C を現します。 C はバックスラッシュや引用符であってはなりません。 例えば、‘%c':'’ はコロンを現します。

%c'O'

O が1、2、3文字の8進数からなる文字列のきは、8進コード O の 文字を現します。例えば、‘%c'0'’ はヌル文字を現します。

Fn
Fn

Fprintf 変換指定フォーマットで n が以下の文字であるとき、 n の値を F を使って整形します。例えば、‘%.5dn’ は 行番号を printf のフォーマット ‘%.5dn’ を使って表示します。 printf 変換指定については See section 行グループフォーマット

デフォルトの行フォーマットは ‘%l’ の後に改行が続いたものです。

入力にタブが含まれていて、出力が揃っていることが重要な場合は、 ‘%l’ や ‘%L’ がタブストップの直後から始まるようにするか (例えば 、 の後にタブと ‘%l’ や ‘%L’ を続ける)、 ‘-t’ か ‘--expand-tabs’ オプションを指定するとよいでしょう。

行フォーマットと行グループフォーマットを一緒にすれば、たくさんの 違ったフォーマットを指定することができます。例えば、以下のコマンドは diff の通常のフォーマットと似たフォーマットを使います。 このコマンドを使って diff の出力を細かく制御することができます。

 
cvs diff 
   --old-line-format='< %l
' 
   --new-line-format='> %l
' 
   --old-group-format='%df%(f=l?:,%dl)d%dE
%<' 
   --new-group-format='%dea%dF%(F=L?:,%dL)
%>' 
   --changed-group-format='%df%(f=l?:,%dl)c%dF%(F=L?:,%dL)
%<---
%>' 
   --unchanged-group-format='' 
   myfile

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

A.10.2 diff の使用例

次の実行例は、‘backend.c’ のリビジョン 1.14 と 1.19 間の差分を、 unidiff 形式 (フラグ ‘-u’) で出力します。 またキーワード置換を止めるために ‘-kk’ を指定し、 キーワード置換による差分を無視します。

 
$ cvs diff -kk -u -r 1.14 -r 1.19 backend.c

タグ RELEASE_1_0 が付けられたファイルの集合から、 実験用の枝 EXPR1 が派生していると仮定します。 この枝に加えられた変更を見るには、次のようにします:

 
$ cvs diff -r RELEASE_1_0 -r EXPR1

次の実行例では、二つのリリース間の差分を context 形式で出力します:

 
$ cvs diff -c -r RELEASE_1_0 -r RELEASE_1_1 > diffs

ChangeLogs を運用している場合、 変更を格納する前に次の行のようなコマンドを実行すると、 ChangeLogs の記載事項を入力するのに役立つでしょう。 作業ファイルに加えた変更点のうち、格納していないもの全てを表示します。

 
$ cvs diff -u | less

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

A.11 export—CVS からソースを取り出す, checkout に類似

このコマンドは checkout の変形で、 module のソースのコピーを、 CVS の管理用ディレクトリを除いた状態で取り出します。 例えば出荷用のソースを準備するときなどに export を使います。 出荷したソースを後で再現できることを確認するため、使用の際には (‘-D’ か ‘-r’ による) 日付かタグの指定が要求されます。

cvs export に ‘-kv’ を指定すると便利です。 この指定で全てのキーワードが展開されるため、 出荷先で import されても キーワードによるリビジョン情報が失われません。 しかしモジュールがバイナリ・ファイルを含む場合は、 正しく処理されない可能性があるので注意が必要です。 また ‘-kv’ を使用した後では、ident コマンド (RCS を 構成するコマンドの一つです—‘ident(1)’ を参照) を使用して、 キーワード文字列を抜き出すことができません。 従って ident を使用するつもりなら、 ‘-kv’ を指定してはいけません。


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

A.11.1 export のオプション

export では、以下の標準オプションが利用できます (完全な記述は see section 共通のコマンド・オプション):

-D date

date 以前の最も新しいリビジョンを取り出します。

-f

指定したリビジョンが見付からなかった場合、 (そのファイルを無視せずに) 最も新しいリビションを取り出します。

-l

Local、つまり現在の作業ディレクトリでのみコマンドが 実行されます。

-n

ファイルを取り出したとき、通常実行されるプログラムを実行しません。

-R

ディレクトリを再帰的に取り出します。 このオプションは指定しなくても実行されます。

-r tag

tag で指定されたリビジョンを取り出します。

さらに (checkoutexport で共通な) 以下のオプションも使用可能です:

-d dir

モジュール名を使用する代りに dir というディレクトリを作成します。 CVS がこのフラグを扱う方法の完全な詳細は See section checkout のオプション.

-k subst

キーワード置換モードを設定します (see section 置換モード)。

-N

-d dir’ と併用した場合にのみ有効です。 CVS がこのフラグを扱う方法の完全な詳細は See section checkout のオプション.


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

A.12 history—ファイルと使用者の状態を表示

CVS は、checkout, commit, rtag, update, release コマンドの実行履歴を、 ファイル ‘history’ に記録しています。 history を使って、様々な形式で この情報を表示することができます。

ログを記録したい場合は、ファイル ‘$CVSROOT/CVSROOT/history’ を 作成する必要があります。

注意: history は、‘-f’, ‘-l’, ‘-n’, ‘-p’ を通常の CVS コマンドで用いられるものとは 異なる意味で使用しています (see section 共通のコマンド・オプション)。


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

A.12.1 history のオプション

次のオプション (コマンド書式で ‘-report’ の部分) によって、 生成する報告の種類を決定します:

-c

現在までに使用された commit (つまりリポジトリの変更) について報告します。

-e

全て (全記録種別) を報告します。全ての記録種別に ‘-x’ を指定する ことと等価です。もちろん、‘-e’ は将来のバージョンの CVS に加 えられた記録種別も含みます。特定の記録種別だけを扱うことのできるスクリ プトを書いているなら、‘-x’ を指定する方が良いでしょう。

-m module

特定のモジュールについて報告します (必要ならば複数の ‘-m’ をコマンド行に並べても構いません)。

-o

取り出されたモジュールについて報告します。

-T

全てのタグについて報告します。

-x type

報告を受けたい記録種別の組を type に指定して、 CVS の実行履歴から取り出します。 種別は各々一文字で表され、これを組み合わせて指定します。

以下のコマンドには、各々一つの記録種別を割り当てています:

F

release

O

checkout

E

export

T

rtag

更新の結果は、以下の五つの記録種別のうちのどれかになります:

C

マージを実行した結果、衝突が検出された場合 (手動でのマージが必要)。

G

マージを実行して成功した場合。

U

作業ファイルがリポジトリからコピーされた場合。

P

作業ファイルに対してリポジトリと同じにするためにパッチが適用された場合。

W

(リポジトリから相当するファイルが削除されたため) 更新の際に作業ファイルが削除された場合。

格納の結果は、以下の三つの記録種別のうちのどれかになります:

A

ファイルが初めて追加された場合。

M

ファイルが修正された場合。

R

ファイルが削除された場合。

次のオプション (コマンド書式で ‘-flags’ の部分) によって、 報告の範囲を限定もしくは拡大します。引数はありません:

-a

全ての使用者の情報を表示します (既定では history を実行した人物の情報のみを表示します)。

-l

最後の変更のみを表示します。

-w

history を実行したのと同じ作業ディレクトリから行われた 変更に関する記録のみを表示します。

次のオプション (コマンド書式で ‘-options args’ の部分) は、 引数に基づいて報告の範囲を限定します:

-b str

モジュール名, ファイル名, リポジトリのパスのいずれかに、 文字列 str が含まれる記録のみを表示します。

-D date

date 以降のデータを表示します。 普通の ‘-D date’ は date 以前の 最新リビジョンを選択しますから、少し意味が違います。

-f file

特定のファイルのデータを表示します (‘-f’ オプションをコマンド行で 複数指定することができます)。これはコマンド行でファイルを指定するのと 等価です。

-n module

特定のモジュールのデータを表示します (複数の ‘-n’ をコマンド行で 並べることができます)。

-p repository

指定したリポジトリのデータを表示します (必要ならば複数の ‘-p’ をコマンド行に並べても構いません。)

-r rev

リビジョンもしくはタグを rev に指定して、 このリビジョン以降の記録を表示します。 実行時に全ての RCS ファイルについて rev を検索します。

-t tag

履歴ファイルにタグ tag が 追加された後の記録を表示します。 このオプションを指定した場合、RCS ファイルを検索せず、 履歴ファイルのみを参照するため、 オプション ‘-r’ の場合よりもかなり高速です。

-u name

name で指定された使用者の記録を表示します。

-z timezone

選択された登録の時間を UTC の代わりに指定された標準時を用いて表示しま す。


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

A.13 import—CVS にソースを取り込む, ベンダー枝を使用

import を用いて、外部の供給元 (例えばソース・ベンダー) からのソース配布物全体を、自分のリポジトリに取り入れることができます。 リポジトリを最初に作成する場合と、外部の供給元がモジュールを 大幅に更新した場合の両方でこのコマンドを用います。 この件については See section サード・パーティーのソースの追っかけ.

repository には、リポジトリにするディレクトリの名前 (もしくは、ディレクトリへのパス) を、 CVS のルート・ディレクトリからの相対パス名で指定します。 指定したディレクトリが存在しなくても自動的に作成されます。

(前回の import から) ずっと変更を加えてきたリポジトリに対し、 ソースを更新するために import を用いると、 互いの開発系統間で衝突が発生したファイル全てが報告されます。 この時 import から具体的な指示がありますので、 それを参考にしながら ‘checkout -j’ を使って変更点を取り入れて下さい。

CVS は無視するように設定されたファイルは (see section cvsignore でファイルを無視する)、 取り込まず、無視したことを示すため ‘I ’ に続けてファイル名を表示します (出力に関する完全な説明は see section import の出力)。

$CVSROOT/CVSROOT/cvswrappers’ が存在する場合、 このファイルの記述に合致するファイルやディレクトリは 各々一括して扱われ、リポジトリに取り込まれる前に、 適切なフィルタが適用されます。See section cvswrappers ファイル.

外部からのソースは第一層の枝、既定だと 1.1.1 に保存されます。 以降の更新は全てこの枝の葉となります。 例えば最初に取り込んだソース集合のファイルは リビジョン 1.1.1.1 になり、次の取り込みで そのファイルが更新された場合には 1.1.1.2 となり、以下同様に続きます。

少なくとも次の三つの引数を指定する必要があります。 まずソース集合を識別するために repository が必要です。 次の vendortag は枝全体 (例えば 1.1.1) を示すタグ名です。 そして import を実行する度に作成される葉のうち、 どの葉のファイルかを識別するため、 最低一つの releasetag を指定しなくてはいけません。

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


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

A.13.1 import のオプション

import では、以下の標準オプションが利用できます (完全な記述は see section 共通のコマンド・オプション):

-m message

エディタを立ち上げる代りに、message をログ情報に指定します。

以下のような追加の特別なオプションがあります。

-b branch

複数のベンダー枝 参照。

-k subst

希望するキーワード置換モードを指定します。 この設定は、新たに取り入れる全てのファイルに適用されますが、 リポジトリに既に存在するファイルには適用されません。 ‘-k’ に使用できる設定の一覧は 置換モード 参照。

-I name

取り込む際に無視するファイル名を指定します。 無視したいファイルが複数あるときは、 このオプションを何個並べても構いません。 全てのファイルを無視したくない場合は、 (それらは既定では無視されるとしても) ‘-I !’ と指定して下さい。

name には、ファイル ‘.cvsignore’ と同じ ファイル名形式が使用できます。See section cvsignore でファイルを無視する.

-W spec

取り込む際に、 フィルタを適用したいファイル名を指定します。 フィルタを適用したいファイルが複数あるときは、 このオプションを何個並べても構いません。

spec には、ファイル ‘.cvswrappers’ と同じ ファイル名形式が使用できます。See section cvswrappers ファイル.


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

A.13.2 import の出力

import の進行状況を知らせるために、 処理中のファイル名が一行ずつ表示され、 行頭にはファイルの状態を示す文字が付加されます:

U file

このファイルが既にリポジトリに存在し、かつ変更されてないことを示します。 (必要ならば) 新しいリビジョンが作成されます。

N file

このファイルが新規であり、リポジトリに追加されたことを示します。

C file

このファイルが既にリポジトリに存在し、かつ変更されていて、 マージが必要であることを示します。

I file

このファイルが無視されることを示します (see section cvsignore でファイルを無視する)。

L file

このファイルがシンボリック・リンクであることを示します。 cvs import はシンボリック・リンクを無視します。いろんな人が定期 的にこの振舞いは変更されるべきだと提案しますが、どれに変更されるべきか についての同意があるとすれば、それは明らかでないように思われます。 (管理用ファイル ‘modules’ の各種オプションを checkout や update 等でシンボリック・リンクを再生成するために使うことができます。 see section The modules file。)


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

A.13.3 import の使用例

サード・パーティーのソースの追っかけ存在するファイルからディレクトリを生成する を参照して下さい。


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

A.14 log—ファイルのログ情報を表示

ファイルのログ情報を表示します。以前の logRCS のコマンド rlog を呼び出していましたが、 現在はそうではありません。しかしこのような経緯から、 このコマンドの出力やオプションは、 他の CVS コマンドとは異なったものになっています。

このコマンドの出力には、RCS ファイルの所在、 先頭リビジョン (幹の最新リビジョン)、 全てのタグ名などが含まれます。 各リビジョンに対しては、リビジョン番号、格納者、 追加/削除された行数、ログ・メッセージが表示されます。 また時間は全て協定世界時 (UTC) で表示されます。 (CVS の他の部分では地方時間帯による時刻を表示します。)

注意: log は ‘-R’ を CVS 普通の使用と衝突す る方法で使います (see section 共通のコマンド・オプション)。


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

A.14.1 log のオプション

オプションを指定しなければ、log は利用できる全ての 情報を表示します。つまりオプションは全て出力を制限するものです。

-b

既定の枝 (通常は幹で最も大きな番号の枝) に関する情報を表示します。

-d dates

dates に示されたリビジョンの情報を表示します。 dates には格納日時の範囲をセミコロンで区切って記述します。 日時の表現形式は他の CVS コマンドの ‘-D’ オプションと同じです (see section 共通のコマンド・オプション)。 それを次のように組み合わせて、格納日時の範囲を表現します:

d1<d2
d2>d1

d1 から d2 までの間に格納されたリビジョンを選択します。

<d
d>

d より前に格納された全てのリビジョンを選択します。

d<
>d

d より後に格納された全てのリビジョンを選択します。

d

d 以前の最新のリビジョンを一つ選択します。

>’ や ‘<’ の後に ‘=’ を付ければ、端を含まない 範囲指定ではなく、端を含むような範囲指定が可能です。

要素の区切りがセミコロン ‘;’ であることに注意して下さい。

-h

RCS ファイルの名前, 作業ディレクトリのファイル名, 先頭リビジョン, 既定の枝, 利用者一覧, ロックモード, タグ名, 拡張子を表示します。

-l

Local、つまり現在の作業ディレクトリでのみコマンドが 実行されます。(これを指定しない場合再帰的に実行されます)。

-N

このファイルではタグ名の一覧を表示しません。 タグ名を多く使用していると、その表示だけで3ページ以上のタグ情報を "more" することになります。 タグ名を省略したログ情報でも構わないときは、 このオプションを指定すると便利です。

-R

RCS ファイルの名前だけを表示します。

-rrevisions

revisions に示されたリビジョンの情報を表示します。 revisions にはリビジョンの範囲をカンマで区切って記述します。 利用可能な範囲指定の書式を次に示します:

rev1:rev2

rev1 から rev2 までのリビジョンを選択します (同じ枝である 必要があります)。

rev1::rev2

同様ですが、rev1 を除きます。

:rev
::rev

枝の最初から rev までのリビジョンを選択します。

rev:

rev から同じ枝の最後のリビジョンまでを選択します。

rev::

rev の直後のリビジョンから rev を含む枝の最後の リビジョンまでを選択します。

branch

branch にある全てのリビジョンを選択します。

branch1:branch2
branch1::branch2

この範囲内の枝にある全てのリビジョンを選択します。

branch.

branch の最新リビジョンを選択します。

リビジョンを指定せず ‘-r’ だけを指定した場合、 既定の枝、通常は幹の最新リビジョンを選択します。 従って ‘-r’ と引数との間に空白を入れないようにして下さい。

-S

リビジョンが選択されなかった場合にヘッダの出力を止めます。

-s states

states と状態が一致するリビジョンの情報を表示します。 states にはファイルの状態をカンマで区切って記述します。

-t

-h’ の情報に、ファイルの説明文を追加して表示します。

-wlogins

logins に示された使用者が格納したリビジョンの情報を表示します。 logins には使用者名をカンマで区切って記述します。 logins を省略した場合、コマンドを起動した人物の 使用者名が用いられます。 従って ‘-w’ と引数との間に空白を入れないようにして下さい。

log は、オプション ‘-d’, ‘-s’, ‘-w’ の 全てに適合し、かつ ‘-b’, ‘-r’ のいずれかに適合した リビジョンに関する情報を表示します。


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

A.14.2 log の使用例

使用例を募集しています。


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

A.15 rdiff—リリース間の ‘patch’ 形式の差分

二つのリリース間の差分を、 Larry Wall の ‘patch(1)’ ファイル形式で生成します。 この出力を直接 patch プログラムに食わせて、 古いリリースを新しいリリースに更新できます。 (これは作業ディレクトリを必要とせず、直接リポジトリを操作する 数少ない CVS コマンドの一つです。) このコマンドの実行結果は標準出力に送られます。

一つないし二つのリビジョンか日付の組み合わせを (標準オプション ‘-r’ や ‘-D’ を用いて) 指定することができます。 リビジョンか日付を一つだけ指定した場合、 指定したものと RCS ファイルの先頭リビジョンとの差分が パッチ・ファイルとして出力されます。

ソフトウェア配布物が複数のディレクトリから構成される場合、 別のディレクトリに置かれた古いソースを参照するために、 patch コマンドにオプション ‘-p’ を 指定する必要があるかも知れません。


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

A.15.1 rdiff のオプション

rdiff では、以下の標準オプションが利用できます (完全な記述は see section 共通のコマンド・オプション):

-D date

date 以前の最も新しいリビジョンを利用します。

-f

指定したリビジョンが見付からなかった場合、 (そのファイルを無視せずに) 最も新しいリビションを用います。

-l

Local、つまり現在の作業ディレクトリでのみコマンドが 実行されます。

-R

ディレクトリを再帰的に検査します。 このオプションは指定しなくても実行されます。

-r tag

tag で指定されたリビジョンを用います。

さらに以下のオプションも使用可能です:

-c

Context 形式で出力します。 これが既定形式なので指定する必要はありません。

-s

パッチの代りに変更要旨だけが報告されます。 指定したリリース間で変更されたり追加されたファイルの情報が 標準出力に送られます。 これは例えば、二つの日付やリビジョン間で変更された ファイルを一覧するのに便利です。

-t

先頭にある二つのリビジョン間の差分を標準出力に送ります。 これは、そのファイルの最新の変更点を見るときに使います。

-u

Context 形式ではなく、unidiff 形式を用います。 古いバージョンの patch プログラムは unidiff 形式を扱えないので、 パッチをネットに投稿するつもりならば、 ‘-u’ を使用しない方が賢明でしょう。

-V vn

RCS のバージョン vn における展開方法に従って、 キーワードを展開します (RCS のバージョン 5 で展開方法が変更されました)。 このオプションはもう使用できないことに注意してください。 CVSRCS バージョン 5 がするように常にキーワードを展開します。


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

A.15.2 rdiff の使用例

foo@example.net から、 コンパイラ ‘tc’ をリリース 1.2 から 1.4 へ更新したい、 というメールを受け取ったと仮定します。 手元にそんなパッチがない場合でも、 CVS なら次のようなコマンドを使って簡単に対応できます:

 
$ cvs rdiff -c -r FOO1_2 -r FOO1_4 tc | \
$$ Mail -s 'The patches you asked for' foo@example.net

リリース 1.3 のバグ修正用に枝 ‘R_1_3fix’ を作成し、 修正後のリリース 1.3.1 にタグ ‘R_1_3_1’ を付けたと仮定します。 この枝に対して、修正版以降に加えられた開発の概略を知りたい場合は、 次のようなコマンドを使います:

 
$ cvs patch -s -r R_1_3_1 -r R_1_3fix module-name
cvs rdiff: Diffing module-name
File ChangeLog,v changed from revision 1.52.2.5 to 1.52.2.6
File foo.c,v changed from revision 1.52.2.3 to 1.52.2.4
File bar.h,v changed from revision 1.29.2.1 to 1.2

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

A.16 release—モジュールの放棄を表明する

このコマンドは ‘cvs checkout’ の効果を安全に消し去ります。 CVS はファイルをロックしないため、 このコマンドが絶対に必要なわけではありません。 作業ディレクトリを単に削除したいなら、それでも構いません。 ただしこの場合、うっかりすると変更内容を失う恐れがあります。 またファイル ‘history’ (see section ファイル history) にも、 作業ディレクトリを放棄したという情報が残りません。

これらの問題を避けるためにも ‘cvs release’ を使用して下さい。 このコマンドは、未格納の変更点が残ってないかどうか調べます。 次に CVS の作業ディレクトリのすぐ上で実行しているかどうか調べます。 さらに作業ディレクトリに記録されたリポジトリが、 モジュールに定義されているリポジトリと等しいかどうか調べます。

上記全ての条件が満たされた場合にだけ、 (作業ディレクトリを故意に放棄した証拠として) CVS の履歴ログ に ‘cvs release’ の実行記録が残されます。


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

A.16.1 release のオプション

release ではオプションが一つだけ利用できます:

-d

放棄判定に成功したとき、作業ディレクトリを削除します。 このフラグを指定しない場合、 作業ディレクトリはそのまま残されます。

警告: release コマンドは 全てのディレクトリとファイルを再帰的に削除していきます。 これには重篤な副作用があり、作業ディレクトリに作成したけれど、 リポジトリには追加してないディレクトリ全てが、 (add コマンド使って。see section ディレクトリにファイルを加える) 何の表示も無く削除されます—その中身が空でなくても!


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

A.16.2 release の出力

release によって作業ディレクトリを放棄する前に、 最新でないファイルそれぞれについて一行ずつ状態を表示します。

U file
P file

より新しいリビジョンがリポジトリに存在し、 かつ作業ファイルが編集されてないことを示します。 (‘U’ と ‘P’ は同じです。)

A file

作業ディレクトリにファイルが追加されたけれど、 まだリポジトリには格納されてないことを示します。 作業ディレクトリを削除すれば、このファイルは失なわれます。

R file

作業ファイルは削除されているけれど、まだこの変更が格納されてないため、 リポジトリからは削除されてないことを示します。See section commit—ファイルをリポジトリに格納する.

M file

作業ディレクトでファイルが修正されています。リポジトリにも新しいリビジョ ンがあるかもしれません。

? file

作業ディレクトリに file というファイルがあるが、 リポジトリには対応するファイルが無く、 CVS が無視するファイルの一覧にも入ってないことを示します (‘-I’ オプションの説明の参照と、see section cvsignore でファイルを無視する)。 作業ディレクトリを削除すれば、このファイルは失なわれます。


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

A.16.3 release の使用例

ディレクトリ ‘tc’ の放棄判定をしてから作業ディレクトリを削除しま す。

 
$ cd ..         # cvs release’ は作業ディレクトリの
                # すぐ上で実行しなくてはいけません。
$ cvs release -d tc
You have [0] altered files in this repository.
Are you sure you want to release (and delete) directory `tc': y
$

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

A.17 update—作業コピーをリポジトリと一致させる

共有するリポジトリから作業コピーを取り出した後でも、 他の開発者はリポジトリのソースを変更し続けるでしょう。 開発工程の然るべき時に update コマンドを使えば、 最後の checkoutupdate 以降の、 どのリビジョンでも取り入れることができます。


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

A.17.1 update のオプション

update では、以下の標準オプションが利用できます (完全な記述は see section 共通のコマンド・オプション):

-D date

date 以前の最も新しいリビジョンを利用します。 このオプションは貼り付けられ、 勝手に ‘-P’ オプションも実行されます。 貼り付いたタグ/日付についての詳細は 貼り付いたタグ.

-f

-D date’ や ‘-r tag’ と一緒に指定します。 指定したリビジョンが見付からなかった場合、 (そのファイルを無視せずに) 最も新しいリビションを取り出します。

-k kflag

キーワード置換モードを kflag に指定します。 詳細は 置換モード を参照。 このオプションは貼り付けられます。つまりこれ以後、 この作業ディレクトリでファイルが更新されるときには、 同じ kflag が使用され続けます。 status コマンドを用いて 貼り付いたオプションを見ることができます。 status コマンドの情報は CVS コマンドの簡単な便覧 を参照してください。

-l

Local、つまり現在の作業ディレクトリでのみコマンドが 実行されます。See section 再帰的動作.

-P

空になったディレクトリを削除 (prune) します。 ディレクトリの改名と移動 参照。

-p

ファイルを標準出力に送り (pipe) ます。

-R

ディレクトリを再帰的に更新します (既定)。See section 再帰的動作.

-r rev

tag で指定されたリビジョン/タグを取り出します。 このオプションは貼り付けられ、 ‘-P’ オプションも勝手に実行されます。 貼り付いたタグ/日付についての詳細は see section 貼り付いたタグ.

さらに update では次の固有オプションも使用可能です。

-A

貼り付いた全てのタグや日付、 また ‘-k’ オプションの指定を剥がします。 貼り付いたタグ/日付についての詳細は 貼り付いたタグ.

-C

手元で修正されたファイルをリポジトリの無修正のもので上書きします (修正 されたファイルは ‘.#file.revision’ に保存されます。)

-d

リポジトリに存在し、 作業ディレクトリに無いディレクトリを作成します。 通常は作業ディレクトリに既に存在するものだけが、 update の対象となります。

最初に checkout した後にリポジトリに作成された、 新たなディレクトリを取り出すときに使用します。 しかし残念なことに副作用があります。 作業ディレクトリを作成するときに、 (モジュール名を利用したり、 コマンド行で望みのファイルやディレクトリを明示したりして) 特定のディレクトリを故意に避けていた場合、 ‘-d’ を使用すると余計なディレクトリまで作成されてしまいます。

-I name

update の際に、 name と一致するファイル名が無視されます。 無視したいファイルが複数あるときは、 コマンド行に ‘-I’ を必要なだけ並べても構いません。 全てのファイルを無視したくない場合は、 ‘-I !’ と指定して下さい。 CVS にファイルを無視させる他の方法は See section cvsignore でファイルを無視する.

-Wspec

update の際に、 フィルタを掛けるべきファイル名を指定します。 このオプションは繰り返し利用することができます。

.cvswrappers’ と同じ形式を用いて、 spec にファイル名を指定します。See section cvswrappers ファイル.

-jrevision

-j’ オプションを二つ指定した場合、 最初に指定したリビションから次に指定したリビジョンへの変更を、 作業ディレクトリにマージします。

-j’ オプションが一つの場合、 その分岐リビジョンから指定したリビジョンへの変更を、 作業ディレクトリにマージします。 分岐リビジョンとは、作業ディレクトリの元になったリビジョンと、 ‘-j’ で指定したリビジョンとの共通の祖先です。

枝からの変更に ‘-j branchname’ の代わりに ‘-j tagname’ オプションを一つだけ使うと、 通常は枝で削除されたファイルが削除されないことに注意してください。 詳細は、See section ファイルの追加や削除もマージできる

-j’ オプションに枝を指定する場合、 日付の指定を付加することができます。 このとき選択されるリビジョンは、指定日以前のものに制限されます。 日付の指定は、タグ名の後のコロン (:) に続けて記述します: ‘-jSymbolic_Tag:Date_Specifier’。

See section 枝とマージ.


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

A.17.2 update の出力

updatecheckout の進行状況を知らせるために、 処理中のファイル名が一行ずつ表示され、 行頭にはファイルの状態を示す文字が付加されます:

U file

リポジトリと一致するようにファイルが更新されたことを示します。 リポジトリに存在するファイルが作業ディレクトリに無かった場合や、 修正していない作業コピーよりも新しいバージョンが リポジトリに格納されていた場合の処理です。

P file

U’ と同様ですが、CVS サーバはファイル全体ではなく、パッチを 送ります。これは ‘U’ と同じことをより少ない帯域の消費で行ないます。

A file

作業ディレクトリにファイルが加えられ、それをリポジトリに 反映するために ‘commit’ の実行が必要な状態を示します。 つまりファイルの格納を忘れないように注意を促しています。

R file

作業ディレクトリからファイルが削除され、それをリポジトリに 反映するために ‘commit’ の実行が必要な状態を示します。 つまりファイルの格納を忘れないように注意を促しています。

M file

作業ディレクトリで修正されたファイルであることを示します。

M’ は、ファイルに対する次の二つの修正状態のうちの一方を示します。 一つ目は、リポジトリの当該ファイルが修正されていないため、 このファイルはあなたが最後に見たときと同じ状態にある場合です。 二つ目は、作業コピーと同様に、 リポジトリの当該ファイルも修正されていたため、 これらを作業ディレクトリでマージした結果、 衝突することなく正常に処理された場合です。

ファイルのマージが行われるとその旨が表示され、 (update が実行される前と同じ内容の) 作業ファイルのバックアップ・コピーが生成されます。 update の実行中にそのファイルの名前もちゃんと表示されます。

C file

file の作業コピーへの変更とリポジトリでの変更をマージした際に、 衝突が見つかったことを示します。 file (作業コピー) は 2つのリビジョンをマージしようとした結果に置き換えられ、 元のファイルは ‘.#file.revision’ という名前で、 作業ディレクトリに保存されます。ここで revision は、 ファイルの修正を開始した時点での RCS リビジョンです。衝突の例 の説明を参考にして 衝突を解決して下さい。 (‘.#’ で始まるファイルを数日間利用しなかった場合、 自動的に削除するシステムがあることに注意して下さい。 元のファイルを保存したい場合は名前を変更すると良いでしょう。) VMS ではファイル名の先頭に、 ‘.#’ ではなく ‘__’ を使用します。

? file

作業ディレクトリに file というファイルがあるけれど、 リポジトリには対応するファイルが無く、 CVS が無視するファイルの一覧にも入ってないことを示します (‘-I’ オプションの説明及び see section cvsignore でファイルを無視する を参照)。


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

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