この付録は CVS コマンドの全体構造の説明をし、いくつかのコマンドは 詳しく説明します (他のものは別のところで説明されています。CVS コ マンドの簡単な便覧は、see section CVS コマンドの簡単な便覧)。
CVS のコマンド全体の書式を示します:
cvs [ cvs_options ] cvs_command [ command_options ] [ command_args ]
cvs
cvs_options
cvs_command
command_options
command_args
不幸な事に、
cvs_options
と command_options
の間で幾つか混乱があります。
`-l' は cvs_option
として使われたときいくつかのコマンドに
影響します。command_option
として使されたときは、より多くのコマ
ンドで意味を持ちます。つまり、上の分類をあまり深刻に受けとめないでくだ
さい。代わりに文書を見るようにしましょう。
CVS はそれ呼んだ環境に 終了状態 (exit status) を設定するこ とで、成功したか失敗したかを示すことができます。 終了状態を調べる正確な方法はオペレーティング・システムごとに異なります。 例えば、unix のシェルスクリプトでは、最後のコマンドが成功終了状態を返 せば変数 `$?' は0で、終了状態が失敗を示していれば、0より大きくな ります。
CVS が成功した場合は、成功状態を返します。エラーがあれば、エラーメッセー
ジを印字して、失敗状態を返します。cvs diff
コマンドはこの例外で
す。違いが見つからなければ成功状態を返し、違いが見つかるか、エラーが発
生したときに失敗状態を返します。この振舞いはエラーの検知には良くないの
で、将来では cvs diff
が他の CVS コマンドと同じように振舞
うように変更される可能性があります。
よく使用する command_option
が幾つかあり、
そのオプションを必ず指定するように設定したいことがあります。
例えば (実際に .cvsrc を実装した要因の一つですが)
多くの人には `diff' の既定出力は大変読みにくく、
context 形式か unidiff 形式のほうが遥かに分かりやすいでしょう。
シェル・スクリプトやエイリアスに頼らなくても、
`~/.cvsrc' ファイルを用いて cvs_commands
各々に
既定のオプションを加えることができます。
`~/.cvsrc' の書式は簡単です。
実行された cvs_command
と同じ名前で始まる行が検索されます。
一致した行を発見したら、行の残りの部分をオプションに分割し (空白のとこ
ろで)、
コマンド行からのオプションを与える前に、
得られたオプションをコマンドの引数として与えます。
コマンドが別名を持つ場合 (例えば、checkout
と co
)、
コマンド行で使われるものとは限りませんが、公的な名前がファイルとの
合致時に使用されます。
例えば `~/.cvsrc' の内容が次の様であった場合:
log -N diff -u update -P checkout -P
`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 を用いるように指定しています。
`cvs_options' (`cvs_command' の左側に与えられる) として利用できるものを以下に示します:
--allow-root=rootdir
-a
-b bindir
-T tempdir
$TMPDIR
の設定や、
コンパイル時のディレクトリ設定よりも優先されます。
この値は絶対パス名で指定して下さい。
-d cvs_root_directory
$CVSROOT
よりも優先します。See section リポジトリ.
-e editor
$CVSEDITOR
や $EDITOR
よりも優先します。
詳しい情報は section 変更の格納 参照。
-f
-H
--help
-l
-n
-Q
-q
-r
$CVSREAD
を設定するのと同じ効果があります
(see section CVS に影響する全ての環境変数)。
既定では、そのファイルが監視されてない限り作業ファイルへの書き込みが許
可されます (see section ファイル編集者の追跡機構)。
-s variable=value
-t
-v
--version
-w
$CVSREAD
の設定を無効にします。
$CVSREAD
が設定されておらず、
`-r' オプションも無い場合には、
作成されるファイルは読み書き可能とされます。
-x
-z gzip-level
ここでは、複数の CVS コマンドで共通に使用できる `command_options' について説明します。 これらのオプションは、 必ず `cvs_command' の右側に付けられます。 以下に示すオプションは、全てのコマンドで使えるわけではありません。 各オプションは、それが意味をなすコマンドにおいてのみ使用可能です。 しかし以下のオプションを持つコマンドがあるならば、 そのオプションは他のコマンドのものと同じ動作であると考えて良いでしょう。 (各コマンドの固有オプションのほとんどは、 他の CVS コマンドのものとは異なる意味を持っています。)
警告: `history' コマンドは例外です。このコマンドには、 ここに示す標準オプションと重複する固有オプションが多くあります。
-D date_spec
update
の際に同じ日付が用いられます
(貼り付いたタグ/日付についての詳細は see section 貼り付いたタグ)。
`-D' は以下のコマンドで利用できます:
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:05ISO8601 の日付様式にはいろいろなものがあり、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
annotate
, checkout
,
export
, rdiff
, rtag
, update
.
警告: commit
と remove
コマンドにも `-f'
オプションがありますが、異なる動作をします。See section commit のオプション,
section ファイルを削除する 参照。
-k 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
checkout
/commit
/rtag
コマンド実行時に、
常には実行されるプログラムを実行しません。
各コマンド実行時のプログラムは、
管理用ファイル `modules' に記述されます
(see section The modules file)。
つまり、このオプションは `modules' の記述を無効にします。
警告: `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 貼り付いたタグ)。
tag には、section タグ--文字によるリビジョン で説明されているような文字列や、
section 枝とマージ で説明されているような枝の名前のどちらであ
ることもできます。
コマンド・オプション `-r' と一緒に
広域オプション `-q' を指定すると、
RCS ファイルが指定したタグを含まない場合に、
警告出力が抑止されるので便利です。
警告: `cvs_command' の左側に指定する
`cvs -r' と混同しないようにして下さい!
`-r' は以下のコマンドで利用できます :checkout
,
commit
, diff
, history
, export
,
rdiff
, rtag
, update
.
-W
import
, update
.
これは雑多な管理機構への CVS のインターフェースです。CVS で は役に立つか疑わしいようなものもありますが、歴史的な互換性の目的のため に存在しています。このコマンドは必ず再帰的に動作するため、使用 の際には細心の注意を払って下さい。
Unix ではグループ名 cvsadmin
が存在する場合、
そのグループの一員だけが cvs admin
を利用できます
(誰にで実行できる cvs admin -k
コマンドを除きます)。
このグループはサーバ側か、非クライアント/サーバの CVS を実行してい
る全てのシステムで存在している必要があります。
その名前で無人のグループを作成すれば、
cvs admin
の使用を全面的に禁止できます。
NT では、cvsadmin
機能は存在せず、全ての使用者が cvs
admin
を実行できます。
これらのオプションの中には CVS での有用性に疑問符が付くものもあり ますが、歴史的な互換性のために存在しています。中には、効果を解除するま で、CVS を使えなくなるものもあります!
-Aoldfile
-alogins
-b[rev]
cvs admin -b
を実行する理由は一つ
だけあります: ベンダー枝を使用しているときに、ベンダーのバージョンに戻
すため、です (see section 最新のベンダーリリースに戻す)。`-b' と引数の間に
空白があってはいけません。
-cstring
-e[logins]
-I
-i
cvs
add
コマンドでファイルを加えてください (see section ディレクトリにファイルを加える)。
-ksubst
cvs update
, cvs export
, cvs checkout
での `-k' オプションが優先されます。
-l[rev]
-L
-mrev:msg
-Nname[:[rev]]
-nname[:[rev]]
-orange
rev1::rev2
::rev
rev::
rev
rev1:rev2
:rev
rev:
cvs tag -d
でタグ
名を消去し、それから cvs admin -o
を実行します。`::' でな
い構文をいてい すると、CVS はリビジョンを消去しますが、タグ名を存
在しないリビジョン指すタグ名として残します。この振舞いは CVS の以
前のバージョンとの互換性のために残されています。しかし、これは便利では
ありませんので、将来は `::' の場合と同様の振舞いに変更されるかも
しれません。
CVS が枝を扱う方法のために、rev は、もし枝であれば名前で指
定することはできません。説明は、See section 魔法の枝番号.
だれも壊したリビジョンのコピーを取り出していないことを確認してください。
誰かがそれを編集して、格納し直そうとすると、変なことが起こります。この
ため、このオプションは無駄な格納を戻すためには良い方法ではありません。
代わりにその変更を元に戻すための新しいリビジョンを格納してください
(see section 二つのリビジョン間の差分をマージする)。
-q
-sstate[:rev]
dead
という状態を
独自の目的で用いることに注意して下さい。
dead
状態を扱う際には、cvs remove
や cvs add
といったコマンドを使用し、
`cvs admin -s' を使用してはいけません。
-t[file]
-t-string
-U
-u[rev]
-Vn
-xsuffixes
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
コマンドの出力は section update の出力 を参照して下さい。
checkout
では、以下の標準オプションが利用できます
(完全な記述は see section 共通のコマンド・オプション):
-D date
-f
-k kflag
status
コマンドを用いて
貼り付いたオプションを見ることができます。
status
コマンドの情報は section CVS コマンドの簡単な便覧 を参照してください。
-l
-n
-P
-p
-R
-r tag
さらに checkout
では次の固有オプションも使用可能です:
-A
-c
-d dir
-j tag
-N
-s
モジュール `tc' のコピーを取り出します:
$ cvs checkout tc
モジュール `tc' を昨日の状態で取り出します:
$ cvs checkout -D yesterday tc
commit
は、作業ファイルに対する変更を
リポジトリに組み入れる際に使用します。
格納するファイルを特に指定しなければ、
現在の作業ディレクトリの全ファイルが調査され、
変更が加えられたファイルだけがリポジトリに格納されます。
既定 (もしくは明示的にオプション `-R' が指定された場合) では、
サブディレクトリのファイルも調査され、変更されていれば格納されます。
オプション `-l' を指定して、
commit
の動作を現在のディレクトリだけに留めることも可能です。
commit
は、選択されたファイルが
リポジトリの最新リビジョンであるかどうか確認します。
指定されたファイルの中に update
(see section update---作業コピーをリポジトリと一致させる)
が必要なものが一つでもあれば、その旨が表示され、
格納せずに終了します。
commit
はあえて update
コマンドを呼び出さず、
開発者自身に適切な時期を判断してもらいます。
全てが正常ならば、ログ・メッセージを記すためにエディタが起動されます。
ログ・メッセージは幾つかの処理プログラムに送られると同時に
(section The modules file と section 管理用ファイル loginfo を参照)、
リポジトリ中の RCS ファイルにも記録されます。
このログ・メッセージを参照するには log
コマンドを
用いて下さい。section log---ファイルのログ情報を表示 参照。
オプション `-m message' で
コマンド行にログ・メッセージを記述したり、
オプション `-F file' で
ログ・メッセージを記述したファイルを指定すれば、
エディタを起動しなくて済みます。
commit
では、以下の標準オプションが利用できます
(完全な記述は see section 共通のコマンド・オプション):
-l
-n
-R
-r revision
さらに commit
では以下のオプションも使用可能です:
-F file
-f
$ cvs commit -f file $ cvs commit -r 1.8 file`-f' オプションは再帰を使いません (すなわち、`-l' を含んでい ます)。全てのサブディレクトリの全てのファイルの新しいリビジョンの格納 を CVS 強制するには、`-f -R' を使用する必要があります。
-m message
オプション `-r' を用いて、枝リビジョン (リビジョン番号が
偶数個のドットを含むもの) に格納することができます。
枝リビジョンは rtag
か tag
コマンドに
オプション `-b' を指定して作成します
(see section 枝とマージ)。
そして 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' は作業ディレクトリに貼り付けられるため、 これを指定する必要はありません。
例えば、先週取り出したリビジョンを元にして、 極めて実験的な変更をソフトウェアに加えてきたとします。 ここで実験に他の開発者を加えたいけれど、 幹の開発系統を妨げたくない場合は、 その変更点を新しい枝に格納すれば良いでしょう。 すると他の開発者も実験中のコードを取り出して、 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
diff
コマンドは、
別々のリビジョン間の差異を比較するのに使用します。
特にオプションを指定しない場合、
作業ファイルをその由来となったリビジョンと比較し、
検出された全ての差異を報告します。
ファイル名を指定した場合、そのファイルについてのみ比較します。 ディレクトリを指定した場合、その下の全てのファイルを比較します。
diff の終了状態は他の CVS コマンドと違います。詳細は section CVS の終了状態 を参照してください。
diff
では、以下の標準オプションが利用できます
(完全な記述は see section 共通のコマンド・オプション):
-D date
-k kflag
-l
-R
-r tag
以下のオプションは出力の書式を指定します。 意味は GNU diff と同じです。
-0 -1 -2 -3 -4 -5 -6 -7 -8 -9 --binary --brief --changed-group-format=arg -c -C nlines --context[=lines] -e --ed -t --expand-tabs -f --forward-ed --horizon-lines=arg --ifdef=arg -w --ignore-all-space -B --ignore-blank-lines -i --ignore-case -I regexp --ignore-matching-lines=regexp -h -b --ignore-space-change -T --initial-tab -L label --label=label --left-column -d --minimal -N --new-file --new-line-format=arg --old-line-format=arg --paginate -n --rcs -s --report-identical-files -p --show-c-function -y --side-by-side -F regexp --show-function-line=regexp -H --speed-large-files --suppress-common-lines -a --text --unchanged-group-format=arg -u -U nlines --unified[=lines] -V arg -W columns --width=columns
次の実行例は、`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
このコマンドは checkout
の変形で、
module のソースのコピーを、
CVS の管理用ディレクトリを除いた状態で取り出します。
例えば出荷用のソースを準備するときなどに export
を使います。
出荷したソースを後で再現できることを確認するため、使用の際には
(`-D' か `-r' による) 日付かタグの指定が要求されます。
cvs export
に `-kv' を指定すると便利です。
この指定で全てのキーワードが展開されるため、
出荷先で import
されても
キーワードによるリビジョン情報が失われません。
しかしモジュールがバイナリ・ファイルを含む場合は、
正しく処理されない可能性があるので注意が必要です。
また `-kv' を使用した後では、ident
コマンド (RCS を
構成するコマンドの一つです---`ident(1)' を参照) を使用して、
キーワード文字列を抜き出すことができません。
従って ident
を使用するつもりなら、
`-kv' を指定してはいけません。
export
では、以下の標準オプションが利用できます
(完全な記述は see section 共通のコマンド・オプション):
-D date
-f
-l
-n
-R
-r tag
さらに (checkout
と export
で共通な)
以下のオプションも使用可能です:
-d dir
-k subst
-N
CVS は、checkout
, commit
, rtag
,
update
, release
コマンドの実行履歴を、
ファイル `history' に記録しています。
history
を使って、様々な形式で
この情報を表示することができます。
ログを記録したい場合は、ファイル `$CVSROOT/CVSROOT/history' を 作成する必要があります。
警告: history
は、`-f', `-l', `-n',
`-p' を通常の CVS コマンドで用いられるものとは
異なる意味で使用しています (see section 共通のコマンド・オプション)。
次のオプション (コマンド書式で `-report' の部分) によって、 生成する報告の種類を決定します:
-c
commit
(つまりリポジトリの変更)
について報告します。
-e
-m module
-o
-T
-x type
F
O
E
T
C
G
U
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
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 ソースの取得)。
import
では、以下の標準オプションが利用できます
(完全な記述は see section 共通のコマンド・オプション):
-m message
以下のような追加の特別なオプションがあります。
-b branch
-k subst
-I name
-W spec
import
の進行状況を知らせるために、
処理中のファイル名が一行ずつ表示され、
行頭にはファイルの状態を示す文字が付加されます:
U file
N file
C file
I file
L file
cvs import
はシンボリック・リンクを無視します。いろんな人が定期
的にこの振舞いは変更されるべきだと提案しますが、どれに変更されるべきか
についての同意があるとすれば、それは明らかでないように思われます。
(管理用ファイル `modules' の各種オプションを checkout や update
等でシンボリック・リンクを再生成するために使うことができます。
see section The modules file。)
section サード・パーティーのソースの追っかけ と section 存在するファイルからディレクトリを生成する を参照して下さい。
ファイルのログ情報を表示します。以前の log
は
RCS のコマンド rlog
を呼び出していましたが、
現在はそうではありません。しかしこのような経緯から、
このコマンドの出力やオプションは、
他の CVS コマンドとは異なったものになっています。
このコマンドの出力には、RCS ファイルの所在、 先頭リビジョン (幹の最新リビジョン)、 全てのタグ名などが含まれます。 各リビジョンに対しては、リビジョン番号、格納者、 追加/削除された行数、ログ・メッセージが表示されます。 また時間は全て協定世界時 (UTC) で表示されます。 (CVS の他の部分では地方時間帯による時刻を表示します。)
警告: log
は `-R' を CVS 普通の使用と衝突す
る方法で使います (see section 共通のコマンド・オプション)。
オプションを指定しなければ、log
は利用できる全ての
情報を表示します。つまりオプションは全て出力を制限するものです。
-b
-d dates
d1<d2
d2>d1
<d
d>
d<
>d
d
-h
-l
-N
-R
-rrevisions
rev1:rev2
:rev
rev:
branch
branch1:branch2
branch.
-s states
-t
-wlogins
log
は、オプション `-d', `-s', `-w' の
全てに適合し、かつ `-b', `-r' のいずれかに適合した
リビジョンに関する情報を表示します。
使用例を募集しています。
二つのリリース間の差分を、
Larry Wall の `patch(1)' ファイル形式で生成します。
この出力を直接 patch
プログラムに食わせて、
古いリリースを新しいリリースに更新できます。
(これは作業ディレクトリを必要とせず、直接リポジトリを操作する
数少ない CVS コマンドの一つです。)
このコマンドの実行結果は標準出力に送られます。
一つないし二つのリビジョンか日付の組み合わせを (標準オプション `-r' や `-D' を用いて) 指定することができます。 リビジョンか日付を一つだけ指定した場合、 指定したものと RCS ファイルの先頭リビジョンとの差分が パッチ・ファイルとして出力されます。
ソフトウェア配布物が複数のディレクトリから構成される場合、
別のディレクトリに置かれた古いソースを参照するために、
patch
コマンドにオプション `-p' を
指定する必要があるかも知れません。
rdiff
では、以下の標準オプションが利用できます
(完全な記述は see section 共通のコマンド・オプション):
-D date
-f
-l
-R
-r tag
さらに以下のオプションも使用可能です:
-c
-s
-t
-u
patch
プログラムは unidiff 形式を扱えないので、
パッチをネットに投稿するつもりならば、
`-u' を使用しない方が賢明でしょう。
-V vn
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
このコマンドは `cvs checkout' の効果を安全に消し去ります。 CVS はファイルをロックしないため、 このコマンドが絶対に必要なわけではありません。 作業ディレクトリを単に削除したいなら、それでも構いません。 ただしこの場合、うっかりすると変更内容を失う恐れがあります。 またファイル `history' (see section ファイル history) にも、 作業ディレクトリを放棄したという情報が残りません。
これらの問題を避けるためにも `cvs release' を使用して下さい。 このコマンドは、未格納の変更点が残ってないかどうか調べます。 次に CVS の作業ディレクトリのすぐ上で実行しているかどうか調べます。 さらに作業ディレクトリに記録されたリポジトリが、 モジュールに定義されているリポジトリと等しいかどうか調べます。
上記全ての条件が満たされた場合にだけ、 (作業ディレクトリを故意に放棄した証拠として) CVS の履歴ログ に `cvs release' の実行記録が残されます。
release
ではオプションが一つだけ利用できます:
-d
release
コマンドは
全てのディレクトリとファイルを再帰的に削除していきます。
これには重篤な副作用があり、作業ディレクトリに作成したけれど、
リポジトリには追加してないディレクトリ全てが、
(add
コマンド使って。see section ディレクトリにファイルを加える)
何の表示も無く削除されます---その中身が空でなくても!
release
によって作業ディレクトリを放棄する前に、
最新でないファイルそれぞれについて一行ずつ状態を表示します。
警告: 作成はしたけれど、add
コマンドを用いて
(see section ディレクトリにファイルを加える) CVS のディレクトリ階層に
加えてないディレクトリは、全て中身があっても完全に無視され
(`-d' が指定されていれば削除され) ます。
U file
P file
A file
R file
M file
? file
ディレクトリ `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 $
共有するリポジトリから作業コピーを取り出した後でも、
他の開発者はリポジトリのソースを変更し続けるでしょう。
開発工程の然るべき時に update
コマンドを使えば、
最後の checkout
や update
以降の、
どのリビジョンでも取り入れることができます。
update
では、以下の標準オプションが利用できます
(完全な記述は see section 共通のコマンド・オプション):
-D date
-f
-k kflag
status
コマンドを用いて
貼り付いたオプションを見ることができます。
status
コマンドの情報は section CVS コマンドの簡単な便覧 を参照してください。
-l
-P
-p
-R
-r rev
さらに update
では次の固有オプションも使用可能です。
-A
-C
-d
update
の対象となります。
最初に checkout
した後にリポジトリに作成された、
新たなディレクトリを取り出すときに使用します。
しかし残念なことに副作用があります。
作業ディレクトリを作成するときに、
(モジュール名を利用したり、
コマンド行で望みのファイルやディレクトリを明示したりして)
特定のディレクトリを故意に避けていた場合、
`-d' を使用すると余計なディレクトリまで作成されてしまいます。
-I name
update
の際に、
name と一致するファイル名が無視されます。
無視したいファイルが複数あるときは、
コマンド行に `-I' を必要なだけ並べても構いません。
全てのファイルを無視したくない場合は、
`-I !' と指定して下さい。
CVS にファイルを無視させる他の方法は See section cvsignore でファイルを無視する.
-Wspec
update
の際に、
フィルタを掛けるべきファイル名を指定します。
このオプションは繰り返し利用することができます。
`.cvswrappers' と同じ形式を用いて、
spec にファイル名を指定します。See section cvswrappers ファイル.
-jrevision
update
や checkout
の進行状況を知らせるために、
処理中のファイル名が一行ずつ表示され、
行頭にはファイルの状態を示す文字が付加されます:
U file
P file
A file
R file
M file
update
が実行される前と同じ内容の)
作業ファイルのバックアップ・コピーが生成されます。
update
の実行中にそのファイルの名前もちゃんと表示されます。
C file
? file
Go to the first, previous, next, last section, table of contents.