| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
この付録は CVS コマンドの全体構造の説明をし、いくつかのコマンドは 詳しく説明します (他のものは別のところで説明されています。CVS コ マンドの簡単な便覧は、see section B. CVS コマンドの簡単な便覧)。
| A.1 CVS コマンド構造の全て | ||
| A.2 CVS の終了状態 | CVS の成功か失敗を示す | |
| A.3 既定オプションと ~/.cvsrc ファイル | ||
| A.4 広域オプション | cvs_command の左側に付けるオプション | |
| A.5 共通のコマンド・オプション | cvs_command の右側に付けるオプション | |
| A.6 admin--管理 | 管理 | |
| A.7 annotate--各行がどのリビジョンが更新されたか? | 各行がどのリビジョンで変更されたか? | |
| A.8 checkout--編集の為にソースを取り出す | 編集の為にソースを取り出す | |
| A.9 commit--ファイルをリポジトリに格納する | ファイルをリポジトリに格納する | |
| A.10 diff--リビジョン間の差分の表示 | リビジョン間の差分を見る | |
| A.11 export--CVS からソースを取り出す, checkout に類似 | CVS からソースを取り出す, checkout に類似 | |
| A.12 history--ファイルと使用者の状態を表示 | ファイルと使用者の状態を表示 | |
| A.13 import--CVS にソースを取り込む, ベンダー枝を使用 | CVS にソースを取り込む, ベンダー枝を使用 | |
| A.14 log--ファイルのログ情報を表示 | ファイルのログ情報を表示 | |
| A.15 rdiff--リリース間の `patch' 形式の差分 | リリース間の `patch' 形式の差分 | |
| A.16 release--モジュールの放棄を表明する | ディレクトリの放棄を表明する | |
| A.17 update--作業コピーをリポジトリと一致させる | 作業コピーをリポジトリと一致させる |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
CVS のコマンド全体の書式を示します:
cvs [ cvs_options ] cvs_command [ command_options ] [ command_args ] |
cvs
cvs_options
cvs_command
command_options
command_args
不幸な事に、
cvs_options と command_options の間で幾つか混乱があります。
オプションの中には cvs_option として使われたときにはいくつかのコマンドに
のみ影響します。command_option として使されたときは、違う意味に
なる可能せいがり、より多くのコマンドで使用できます。
つまり、上の分類をあまり深刻に受けとめないでくだ
さい。代わりに文書を見るようにしましょう。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
CVS はそれ呼んだ環境に 終了状態 (exit status) を設定するこ とで、成功したか失敗したかを示すことができます。 終了状態を調べる正確な方法はオペレーティング・システムごとに異なります。 例えば、unix のシェルスクリプトでは、最後のコマンドが成功終了状態を返 せば変数 `$?' は0で、終了状態が失敗を示していれば、0より大きくな ります。
CVS が成功した場合は、成功状態を返します。エラーがあれば、エラーメッセー
ジを印字して、失敗状態を返します。cvs diff コマンドはこの例外で
す。違いが見つからなければ成功状態を返し、違いが見つかるか、エラーが発
生したときに失敗状態を返します。この振舞いはエラーの検知には良くないの
で、将来では cvs diff が他の CVS コマンドと同じように振舞
うように変更される可能性があります。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
よく使用する command_option が幾つかあり、
そのオプションを必ず指定するように設定したいことがあります。
例えば (実際に .cvsrc を実装した要因の一つですが)
多くの人には `diff' の既定出力は大変読みにくく、
context 形式か unidiff 形式のほうが遥かに分かりやすいでしょう。
シェル・スクリプトやエイリアスに頼らなくても、
`~/.cvsrc' ファイルを用いて cvs_commands 各々に
既定のオプションを加えることができます。
`~/.cvsrc' の書式は簡単です。
実行された cvs_command と同じ名前で始まる行が検索されます。
一致した行を発見したら、行の残りの部分をオプションに分割し (空白のとこ
ろで)、
コマンド行からのオプションを与える前に、
得られたオプションをコマンドの引数として与えます。
コマンドが別名を持つ場合 (例えば、checkout と co)、
コマンド行で使われるものとは限りませんが、公的な名前がファイルとの
合致時に使用されます。
例えば `~/.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 A.4 広域オプション)。
例えば `.cvsrc' 中の以下の行は、
cvs -z6 |
CVS が圧縮レベル 6 を用いるように指定しています。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
`cvs_options' (`cvs_command' の左側に与えられる) として利用できるものを以下に示します:
--allow-root=rootdir
-a
-b bindir
-T tempdir
$TMPDIR の設定や、
コンパイル時のディレクトリ設定よりも優先されます。
この値は絶対パス名で指定して下さい。
(クライアント/サーバとして動作しているときは、`-T' はローカルのプロセスのみに
影響します。クライアントに `-T' を指定してもサーバは影響を受けませんし、
同様にサーバに指定してもクライアントは影響を受けません。)
-d cvs_root_directory
$CVSROOT よりも優先します。See section 2. リポジトリ.
-e editor
$CVSEDITOR や $EDITOR よりも優先します。
詳しい情報は 1.3.2 変更の格納 参照。
-f
-H
--help
-n
CVS は必ずしも `-n' を付けなかったときと全く同じ出力をするわ けではないことに注意してください。ときどき、出力が同じ場合がありますが、 他の場合では、CVS は正確に同じ出力をするために必要な実行を飛ばし ます。
-Q
-q
-r
$CVSREAD を設定するのと同じ効果があります
(see section D. CVS に影響する全ての環境変数)。
既定では、そのファイルが監視されてない限り作業ファイルへの書き込みが許
可されます (see section 10.6 ファイル編集者の追跡機構)。
-s variable=value
-t
-v
--version
-w
$CVSREAD の設定を無効にします。
$CVSREAD が設定されておらず、
`-r' オプションも無い場合には、
作成されるファイルは読み書き可能とされます。
-x
-z gzip-level
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ここでは、複数の CVS コマンドで共通に使用できる `command_options' について説明します。 これらのオプションは、 必ず `cvs_command' の右側に付けられます。 以下に示すオプションは、全てのコマンドで使えるわけではありません。 各オプションは、それが意味をなすコマンドにおいてのみ使用可能です。 しかし以下のオプションを持つコマンドがあるならば、 そのオプションは他のコマンドのものと同じ動作であると考えて良いでしょう。 (各コマンドの固有オプションのほとんどは、 他の CVS コマンドのものとは異なる意味を持っています。)
注意: `history' コマンドは例外です。このコマンドには、 ここに示す標準オプションと重複する固有オプションが多くあります。
-D date_spec
このオプションを用いて作業ファイルを取り出すと、
指定した日付が貼り付けられます。
つまり `-D' オプションの引数が記録され、
これ以後の update の際に同じ日付が用いられます
(貼り付いたタグ/日付についての詳細は see section 4.9 貼り付いたタグ)。
`-D' は以下のコマンドで利用できます:
annotate, checkout, diff, export, history,
rdiff, rtag, update.
(history コマンドはこのオプションを少し違った方法で使用します。
see section A.12.1 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
`-f' のときでさえ、指定したタグは存在していなければならないことに 注意してください (すなわち、必ずしも全てのファイルというわけではなく、 いくつかのファイルにおいて)。 これは CVS が、名前の入力を間違えた ときにエラーを出すことを続けられるようにするためです。
`-f' は以下のコマンドで利用できます:
annotate, checkout,
export, rdiff, rtag, update.
警告: commit と remove コマンドにも `-f'
オプションがありますが、異なる動作をします。See section A.9.1 commit のオプション,
7.2 ファイルを削除する 参照。
-k kflag
このオプションを用いて作業ファイルを取り出すと、
kflag が貼り付けられます。
つまり、このオプションを checkout や update コマンドに
用いた場合、CVS は指定した kflag をそのファイルに結合します。
これ以後、同ファイルに対する update コマンドには
kflag が使用され続けます。
この効果は別の指定を行なうまで止みません。
`-k' オプションは以下のコマンドで利用できます: add,
checkout, diff, import, update.
-l
以下のコマンドで利用できます: annotate, checkout,
commit, diff, edit, editors,
export, log, rdiff, remove, rtag,
status, tag, unedit, update, watch,
and watchers.
-m message
-m message
以下のコマンドで利用できます: add,
commit, import.
-n
注意: `cvs_command' の左側に指定する `cvs -n' と混同しないようにして下さい。
以下のコマンドで利用できます:
checkout, commit, export,
rtag.
-P
-p
以下のコマンドで利用できます: checkout, update.
-R
以下のコマンドで使用可能です: annotate, checkout,
commit, diff, edit, editors,
export, rdiff, remove, rtag,
status, tag, unedit, update, watch,
watchers.
-r tag
tag か rtag コマンドで任意に定義されたタグの他に、
二つの特別なタグ `HEAD' と `BASE' が常に利用できます。
`HEAD' は、リポジトリにある最新のリビジョンを参照します。
`BASE' は、作業コピーの由来となるリビジョンを参照します。
タグを指定して checkout や update コマンドを実行し、
自分の作業ファイルを作った場合、そのタグは貼り付けられます。
つまりこのタグが記録され、以後他のものを指定するまで
update に同じタグが使われ続けます
(貼り付いたタグ/日付についての詳細は see section 4.9 貼り付いたタグ)。
tag には、4.4 タグ--文字によるリビジョン で説明されているような文字列や、 5. 枝とマージ で説明されているような枝の名前のどちらであ ることもできます。
コマンド・オプション `-r' と一緒に 広域オプション `-q' を指定すると、 RCS ファイルが指定したタグを含まない場合に、 警告出力が抑止されるので便利です。
注意: `cvs_command' の左側に指定する `cvs -r' と混同しないようにして下さい!
`-r' は以下のコマンドで利用できます :checkout,
commit, diff, history, export,
rdiff, rtag, update.
-W
以下のコマンドで利用できます: import, update.
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
これは雑多な管理機構への CVS のインターフェースです。CVS で は役に立つか疑わしいようなものもありますが、歴史的な互換性の目的のため に存在しています。このコマンドは必ず再帰的に動作するため、使用 の際には細心の注意を払って下さい。
Unix ではグループ名 cvsadmin が存在する場合、
そのグループの一員だけが cvs admin を利用できます
(誰にで実行できる cvs admin -k コマンドを除きます)。
このグループはサーバ側か、非クライアント/サーバの CVS を実行してい
る全てのシステムで存在している必要があります。
その名前で無人のグループを作成すれば、
cvs admin の使用を全面的に禁止できます。
NT では、cvsadmin 機能は存在せず、全ての使用者が cvs
admin を実行できます。
| A.6.1 admin のオプション |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
これらのオプションの中には CVS での有用性に疑問符が付くものもあり ますが、歴史的な互換性のために存在しています。中には、効果を解除するま で、CVS を使えなくなるものもあります!
-Aoldfile
-alogins
-b[rev]
cvs admin -b を実行する理由は一つ
だけあります: ベンダー枝を使用しているときに、ベンダーのバージョンに戻
すため、です (see section 13.3 最新のベンダーリリースに戻す)。`-b' と引数の間に
空白があってはいけません。
-cstring
-e[logins]
-I
-i
cvs
add コマンドでファイルを加えてください (see section 7.1 ディレクトリにファイルを加える)。
-ksubst
cvs update, cvs export, cvs checkout
での `-k' オプションが優先されます。
-l[rev]
CVS のソース配布物の中の `contrib' ディレクトリの中に、 `rcslock.pl' という名前のスクリプトがあります。 これを用いて上記のロック状態を、 CVS における独占取得 (一時に一人だけがファイル編集可能な状態) に置き換えることができます。 詳細はスクリプトの註釈を参照して下さい (寄贈物の支援と権利の放棄声明文が書かれたファイル `README' も一読して下さい)。 その註釈によれば、厳格ロックモード (既定) に設定しておく必要があります。
-L
-mrev:msg
-Nname[:[rev]]
-nname[:[rev]]
-orange
range の範囲のリビジョンを消去 (過去のものにする) します。
このコマンドは何をしているかを 正確に 知っていないと非常に危険 であることに注意してください (例えば、以下の rev1:rev2 と いう構文がいかに間違いやすいかという警告を読んでください)。
ディスクの容量が少ないなら、このオプションは役に立つかもしれません。し かし、使う前によく考えてください--このコマンドを取り消すためには最後 のバックアップで復元するしかありません! 不注意や、(天が禁止している) CVS のバグによって、計画していたものと違うリビジョンを消してしまったら、 リビジョンが消去される前のエラーを修正する機会はありません。おそらく、 まずリポジトリのコピーで試すというのは良い考えでしょう。
以下のどれかで range を指定します:
rev1::rev2
::rev
rev::
rev
rev1:rev2
:rev
rev:
消去されるべきリビジョンは全て枝やロックを持っていてはいけません。
消去されるべきリビジョンにタグ名があり、`::' 構文のどれかを指定
すると、CVS はエラーを出して、どのリビジョンも消去されません。タ
グ名とリビジョンの両方を消去したいなら、まず cvs tag -d でタグ
名を消去し、それから cvs admin -o を実行します。`::' でな
い構文をいてい すると、CVS はリビジョンを消去しますが、タグ名を存
在しないリビジョン指すタグ名として残します。この振舞いは CVS の以
前のバージョンとの互換性のために残されています。しかし、これは便利では
ありませんので、将来は `::' の場合と同様の振舞いに変更されるかも
しれません。
CVS が枝を扱う方法のために、rev は、もし枝であれば名前で指 定することはできません。説明は、See section 5.5 魔法の枝番号.
だれも壊したリビジョンのコピーを取り出していないことを確認してください。 誰かがそれを編集して、格納し直そうとすると、変なことが起こります。この ため、このオプションは無駄な格納を戻すためには良い方法ではありません。 代わりにその変更を元に戻すための新しいリビジョンを格納してください (see section 5.8 二つのリビジョン間の差分をマージする)。
-q
-sstate[:rev]
dead という状態を
独自の目的で用いることに注意して下さい。
dead 状態を扱う際には、cvs remove
や cvs add といったコマンドを使用し、
`cvs admin -s' を使用してはいけません。
-t[file]
file が省略された場合、標準入力が用いられ、 ファイル終端 (EOF) もしくは `.' のみの行で終了します。 対話的動作が可能なら入力促進も可能です。`-I' を参照してださい。 クライアント/サーバの CVS では標準入力からの読み込みは動作せず、 将来の CVS のリリースでは変更されるかもしれません。
-t-string
-U
-u[rev]
commit 通知メール
が送られます (see section 10.6.2 誰に通知するか CVS に教える)。
`-u' とその引数の間に空白があってはいけません。
-Vn
-xsuffixes
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
files のファイルに対して、各行に幹のヘッドリビジョンと 最後の修正に関する情報を不可して表示します。
| A.7.1 annotate オプション | ||
| A.7.2 annotate 例 |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
annotate では、以下の標準オプションが利用できます
(完全な記述は see section A.5 共通のコマンド・オプション):
-l
-R
-f
-F
-r revision
-D date
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
例えば:
$ 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日に、joe は
ssfile line 1 行を変更せずに ssfile line 2 を追加しました。
この報告は削除されたり置き換えたりされた行については何も
報せません。そのためには cvs diff を使う必要があります
(see section A.10 diff--リビジョン間の差分の表示)。
cvs annotate のオプションの一覧は B. CVS コマンドの簡単な便覧 にあり、
それらを使って annotate するファイルやリビジョンを選択することができます。
オプションは A.5 共通のコマンド・オプション でより詳しく説明されています。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
modules で指定されたモジュールの作業ディレクトリを作成、
もしくは更新し、
その中にソース・ファイルをコピーします。
CVS のほとんどのコマンドは作業ディレクトリを扱うものなので、
まず checkout を実行しておく必要があります。
modules は、 リポジトリ中のディレクトリやファイルへの相対パスだけでなく、 ディレクトリやファイルの集合に対する別名でも構いません。 別名は管理用ファイル `modules' で定義します See section C.1 The modules file.
指定したモジュールにもよりますが、
checkout は再帰的にディレクトリを作成し、
そこに適切なソース・ファイルを入れていきます。
そして (他の開発者が各自のコピーを編集しているかどうかに関わらず)、
好きなときに自分のソース・ファイルを編集し、
他人の変更を取り入れるために更新したり、
自分の変更をリポジトリに反映するために格納したりします。
checkout で作成されるディレクトリに注意して下さい。
最上位のディレクトリは、
必ず checkout を実行したディレクトリに追加され、
通常は指定したモジュールと同じ名前になります。
モジュールに別名が定義されている場合、
サブディレクトリは違う名前になりますが心配は要りません。
checkout の処理中、各ファイルを作業領域に展開したと同時に
その相対パスが表示されますから、
この表示でサブディレクトリを確認して下さい
(広域オプション `-Q' を付けた場合は表示がありません)。
CVS にオプション `-r' が付けられた場合
(see section A.4 広域オプション)、
環境変数 CVSREAD が設定されていた場合
(see section D. CVS に影響する全ての環境変数)、
ファイルが監視されていた場合
(see section 10.6 ファイル編集者の追跡機構) を除いて、
checkout が作成するファイルは読み書き可能な状態になります。
checkout で作成したディレクトリの上で、
再度 checkout を実行しても構わないということに注意してください。
これはリポジトリに作成された新しいディレクトリが作業領域に現れるという
点で、update コマンドに `-d' オプションを付けるのと同様の
効果があります。しかし、update は引数にディレクトリ名を取ります
が、checkout は引数にモジュール名を取ります。checkout を
この様に使うためには、最上位のディレクトリから実行しなければなりません
ので (普段 checkout を実行する場所です)、存在するディレクトリを
更新するために checkout を実行する前に、ディレクトリを最上位の
ディレクトリに変更することを忘れないでください。
checkout コマンドの出力は A.17.2 update の出力 を参照して下さい。
| A.8.1 checkout のオプション | ||
| A.8.2 checkout の使用例 |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
checkout では、以下の標準オプションが利用できます
(完全な記述は see section A.5 共通のコマンド・オプション):
-D date
-f
-k kflag
status コマンドを用いて
貼り付いたオプションを見ることができます。
status コマンドの情報は B. CVS コマンドの簡単な便覧 を参照してください。
-l
-n
-P
-p
-n
-R
-r tag
さらに checkout では次の固有オプションも使用可能です:
-A
-c
-d dir
しかし、重要な例外があります。単独の項目を取り出しているときには、出力 に間に空のディレクトリが無いディレクトリが現れた方がとても便利です。こ の場合のみ、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' オプションに枝を指定する場合、 日付の指定を付加することができます。 このとき選択されるリビジョンは、指定日以前のものに制限されます。 日付の指定は、タグ名の後のコロン (:) に続けて記述します: `-jSymbolic_Tag:Date_Specifier'。
See section 5. 枝とマージ.
-N
-s
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
モジュール `tc' のコピーを取り出します:
$ cvs checkout tc |
モジュール `tc' を昨日の状態で取り出します:
$ cvs checkout -D yesterday tc |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
commit は、作業ファイルに対する変更を
リポジトリに組み入れる際に使用します。
格納するファイルを特に指定しなければ、
現在の作業ディレクトリの全ファイルが調査され、
変更が加えられたファイルだけがリポジトリに格納されます。
既定 (もしくは明示的にオプション `-R' が指定された場合) では、
サブディレクトリのファイルも調査され、変更されていれば格納されます。
オプション `-l' を指定して、
commit の動作を現在のディレクトリだけに留めることも可能です。
commit は、選択されたファイルが
リポジトリの最新リビジョンであるかどうか確認します。
指定されたファイルの中に update (see section A.17 update--作業コピーをリポジトリと一致させる)
が必要なものが一つでもあれば、その旨が表示され、
格納せずに終了します。
commit はあえて update コマンドを呼び出さず、
開発者自身に適切な時期を判断してもらいます。
全てが正常ならば、ログ・メッセージを記すためにエディタが起動されます。
ログ・メッセージは幾つかの処理プログラムに送られると同時に
(C.1 The modules file と C.5.2 管理用ファイル Loginfo を参照)、
リポジトリ中の RCS ファイルにも記録されます。
このログ・メッセージを参照するには log コマンドを
用いて下さい。A.14 log--ファイルのログ情報を表示 参照。
オプション `-m message' で
コマンド行にログ・メッセージを記述したり、
オプション `-F file' で
ログ・メッセージを記述したファイルを指定すれば、
エディタを起動しなくて済みます。
| A.9.1 commit のオプション | ||
| A.9.2 commit の使用例 |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
commit では、以下の標準オプションが利用できます
(完全な記述は see section A.5 共通のコマンド・オプション):
-l
-n
-R
-r revision
さらに commit では以下のオプションも使用可能です:
-F file
-f
作業ファイルに何も変更を加えていない場合でも、 無理矢理新しいリビジョンとして格納します。 現在の file のリビジョンを 1.7 と仮定したとき、 次の二つのコマンドの実行結果は同じになります:
$ cvs commit -f file $ cvs commit -r 1.8 file |
`-f' オプションは再帰を使いません (すなわち、`-l' を含んでい ます)。全てのサブディレクトリの全てのファイルの新しいリビジョンの格納 を CVS 強制するには、`-f -R' を使用する必要があります。
-m message
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
オプション `-r' を用いて、枝リビジョン (リビジョン番号が
偶数個のドットを含むもの) に格納することができます。
枝リビジョンは rtag か tag コマンドに
オプション `-b' を指定して作成します
(see section 5. 枝とマージ)。
そして checkout か update で、
新しく作成した枝からソースを取り出します。
その結果、この作業ソースに対する変更を 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] | [ ? ] |
例えば、先週取り出したリビジョンを元にして、 極めて実験的な変更をソフトウェアに加えてきたとします。 ここで実験に他の開発者を加えたいけれど、 幹の開発系統を妨げたくない場合は、 その変更点を新しい枝に格納すれば良いでしょう。 すると他の開発者も実験中のコードを取り出して、 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] | [ ? ] |
diff コマンドは、
別々のリビジョン間の差異を比較するのに使用します。
特にオプションを指定しない場合、
作業ファイルをその由来となったリビジョンと比較し、
検出された全ての差異を報告します。
ファイル名を指定した場合、そのファイルについてのみ比較します。 ディレクトリを指定した場合、その下の全てのファイルを比較します。
diff の終了状態は他の CVS コマンドと違います。詳細は A.2 CVS の終了状態 を参照してください。
| A.10.1 diff のオプション | ||
| A.10.2 diff の使用例 |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
diff では、以下の標準オプションが利用できます
(完全な記述は see section A.5 共通のコマンド・オプション):
-D date
-k kflag
-l
-R
-r tag
一つもしくは両方のオプション `-r' を、前述の オプション `-D date' と交換することができます。
以下のオプションは出力の書式を指定します。 意味は GNU diff と同じです。 ほとんどのオプションは `-' の後に続く一文字と、 `--' の 後に続く長い名前の二つの同じ意味の名前あります。
patch 適切な動作のために
少なくとも2行文脈を必要とします。
patch 適切な動作のために
少なくとも2行文脈を必要とします。
diff を遅く (ときには非常に遅く) します。
ed スクリプトにします。
ed スクリプトのようなものにしますが、変更の順番を
ファイルでの順番にします。
ed スクリプトのようなものにしますが、変更の順番を
ファイルでの順番にします。
diff を遅く (ときには非常に遅く) します。
patch 適切な動作のために
少なくとも2行文脈を必要とします。
| A.10.1.1 行グループフォーマット | ||
| A.10.1.2 行フォーマット |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
行グループフォーマットはプログラム言語やテキストフォーマット言語を 含む、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 はシェルメタ文字を含むことが多いので 引用符で囲むようにしてください。
行グループフォーマットでは普通の文字は文字自身を現します。 変換の指定は `%' で始まり、以下のどれかの形式になります。
printf 変換指定フォーマットで n が以下の文字であるとき、
n の値を F を使って整形します。
printf 変換指定は `%d'、`%o'、`%x'、`%X' を
指定することができ、それぞれ10進、8進、小文字の16進、大文字の16進の出力を
意味します。`%' の後で、以下のオプションを書くこができます:
`-' は左揃え、整数はフィールドの最小幅、ピリオドの後に
数字 (省略可能) は最小限の桁数をそれぞれ意味します。
例えば、`%5dN' はグループの改行5文字の幅のフィールドに
printf のフォーマット "%5d" を使って表示します。
例えば、 `%(N=0?no:%dN) line%(N=1?:s)' は N (新しいファイルの グループの改行に数) が 0 であれば `no lines' と等価であり、 N が 1 であれば `1 line' に、そうでない場合は `%dN lines' に なります。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
行フォーマットは入力ファイルからの各行が if-then-else フォーマットの 行グループの一部として出力されるかを制御します。
例えば、以下のコマンドはテキストの左に一列変更を示す文字を追加して 出力します。出力の最初の列は削除された行は `-' 、追加された行は `|'、未変更の行は空白になります。出力中に改行が望ましい場所では フォーマットは改行を含みます。
cvs diff --old-line-format='-%l ' --new-line-format='|%l ' --unchanged-line-format=' %l ' myfile |
行フォーマットの指定には以下のオプションのどれかを使います。 format はシェルメタ文字を含むことが多いので 引用符で囲むようにしてください。
行フォーマットでは、普通の文字は文字自身を現します。 変換の指定は `%' で始まり、以下のどれかの形式になります。
printf 変換指定フォーマットで n が以下の文字であるとき、
n の値を F を使って整形します。例えば、`%.5dn' は
行番号を printf のフォーマット `%.5dn' を使って表示します。
printf 変換指定については See section A.10.1.1 行グループフォーマット。
デフォルトの行フォーマットは `%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] | [ ? ] |
次の実行例は、`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] | [ ? ] |
このコマンドは checkout の変形で、
module のソースのコピーを、
CVS の管理用ディレクトリを除いた状態で取り出します。
例えば出荷用のソースを準備するときなどに export を使います。
出荷したソースを後で再現できることを確認するため、使用の際には
(`-D' か `-r' による) 日付かタグの指定が要求されます。
cvs export に `-kv' を指定すると便利です。
この指定で全てのキーワードが展開されるため、
出荷先で import されても
キーワードによるリビジョン情報が失われません。
しかしモジュールがバイナリ・ファイルを含む場合は、
正しく処理されない可能性があるので注意が必要です。
また `-kv' を使用した後では、ident コマンド (RCS を
構成するコマンドの一つです---`ident(1)' を参照) を使用して、
キーワード文字列を抜き出すことができません。
従って ident を使用するつもりなら、
`-kv' を指定してはいけません。
| A.11.1 export のオプション |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
export では、以下の標準オプションが利用できます
(完全な記述は see section A.5 共通のコマンド・オプション):
-D date
-f
-l
-n
-R
-r tag
さらに (checkout と export で共通な)
以下のオプションも使用可能です:
-d dir
-k subst
-N
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
CVS は、checkout, commit, rtag,
update, release コマンドの実行履歴を、
ファイル `history' に記録しています。
history を使って、様々な形式で
この情報を表示することができます。
ログを記録したい場合は、ファイル `$CVSROOT/CVSROOT/history' を 作成する必要があります。
注意: history は、`-f', `-l', `-n',
`-p' を通常の CVS コマンドで用いられるものとは
異なる意味で使用しています (see section A.5 共通のコマンド・オプション)。
| A.12.1 history のオプション |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
次のオプション (コマンド書式で `-report' の部分) によって、 生成する報告の種類を決定します:
-c
commit (つまりリポジトリの変更)
について報告します。
-e
-m module
-o
-T
-x type
以下のコマンドには、各々一つの記録種別を割り当てています:
F
O
E
T
更新の結果は、以下の五つの記録種別のうちのどれかになります:
C
G
U
P
W
格納の結果は、以下の三つの記録種別のうちのどれかになります:
A
M
R
次のオプション (コマンド書式で `-flags' の部分) によって、 報告の範囲を限定もしくは拡大します。引数はありません:
-a
history を実行した人物の情報のみを表示します)。
-l
-w
history を実行したのと同じ作業ディレクトリから行われた
変更に関する記録のみを表示します。
次のオプション (コマンド書式で `-options args' の部分) は、 引数に基づいて報告の範囲を限定します:
-b str
-D date
-f file
-n module
-p repository
-r rev
-t tag
-u name
-z timezone
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
import を用いて、外部の供給元 (例えばソース・ベンダー)
からのソース配布物全体を、自分のリポジトリに取り入れることができます。
リポジトリを最初に作成する場合と、外部の供給元がモジュールを
大幅に更新した場合の両方でこのコマンドを用います。
この件については See section 13. サード・パーティーのソースの追っかけ.
repository には、リポジトリにするディレクトリの名前 (もしくは、ディレクトリへのパス) を、 CVS のルート・ディレクトリからの相対パス名で指定します。 指定したディレクトリが存在しなくても自動的に作成されます。
(前回の import から) ずっと変更を加えてきたリポジトリに対し、 ソースを更新するために import を用いると、 互いの開発系統間で衝突が発生したファイル全てが報告されます。 この時 import から具体的な指示がありますので、 それを参考にしながら `checkout -j' を使って変更点を取り入れて下さい。
CVS は無視するように設定されたファイルは (see section C.8 cvsignore でファイルを無視する)、 取り込まず、無視したことを示すため `I ' に続けてファイル名を表示します (出力に関する完全な説明は see section A.13.2 import の出力)。
`$CVSROOT/CVSROOT/cvswrappers' が存在する場合、 このファイルの記述に合致するファイルやディレクトリは 各々一括して扱われ、リポジトリに取り込まれる前に、 適切なフィルタが適用されます。See section C.2 cvswrappers ファイル.
外部からのソースは第一層の枝、既定だと 1.1.1 に保存されます。 以降の更新は全てこの枝の葉となります。 例えば最初に取り込んだソース集合のファイルは リビジョン 1.1.1.1 になり、次の取り込みで そのファイルが更新された場合には 1.1.1.2 となり、以下同様に続きます。
少なくとも次の三つの引数を指定する必要があります。
まずソース集合を識別するために repository が必要です。
次の vendortag は枝全体 (例えば 1.1.1) を示すタグ名です。
そして import を実行する度に作成される葉のうち、
どの葉のファイルかを識別するため、
最低一つの releasetag を指定しなくてはいけません。
import はそれを起動したディレクトリを変更 しない という
ことに注意してください。特に、ディレクトリを CVS の作業ディレクト
リとして設定しないことに注意してください。もし作業をしたいなら、まずソー
スを取り込んで、それから違うディレクトリに取り出してください
(see section 1.3.1 ソースの取得)。
| A.13.1 import のオプション | ||
| A.13.2 import の出力 | ||
| A.13.3 import の使用例 |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
import では、以下の標準オプションが利用できます
(完全な記述は see section A.5 共通のコマンド・オプション):
-m message
以下のような追加の特別なオプションがあります。
-b branch
-k subst
-I name
name には、ファイル `.cvsignore' と同じ ファイル名形式が使用できます。See section C.8 cvsignore でファイルを無視する.
-W spec
spec には、ファイル `.cvswrappers' と同じ ファイル名形式が使用できます。See section C.2 cvswrappers ファイル.
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
import の進行状況を知らせるために、
処理中のファイル名が一行ずつ表示され、
行頭にはファイルの状態を示す文字が付加されます:
U file
N file
C file
I file
L file
cvs import はシンボリック・リンクを無視します。いろんな人が定期
的にこの振舞いは変更されるべきだと提案しますが、どれに変更されるべきか
についての同意があるとすれば、それは明らかでないように思われます。
(管理用ファイル `modules' の各種オプションを checkout や update
等でシンボリック・リンクを再生成するために使うことができます。
see section C.1 The modules file。)
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
13. サード・パーティーのソースの追っかけ と 3.1.1 存在するファイルからディレクトリを生成する を参照して下さい。
| [ |