CO(1)

名称
co - RCS ファイルからリビジョンを取り出す

書式
co [options] file ...

解説
co は、RCS ファイルからリビジョンを検索し、対応したワークファイルに取り出します。

RCS 拡張子にマッチするファイル名は RCS ファイルであるとみなし、その他 のファイル名はワークファイルであるとみなします。 ci(1) を参照してください。

RCS ファイルのリビジョンはロックするか、ロックしないで取り出されます。 リビジョンをロックすることにより、同時に複数の変更が行われること を防止します。内容を表示したり、読むだけの処理 (たとえば、コンパイル) で 用いたりする場合はロックする必要はありません。編集したり、あとで登録するために 取り出すときは、通常、ロックしなければなりません。他のユーザによって ロックされているリビジョンをロックすることはできません (ロックは rcs(1) によって解 除することができます)。リビジョンロックして取り出すには、さらに、 ユーザが RCS ファイルのアクセスリストに登録されているか、 ファイルの所有者であるか、スーパーユーザであるか、 アクセスリストが空でなければなりません。ロックしないで取り出す場合は、 アクセスリストや他人のロックに影響されることはありません。

取り出されるリビジョンを、リビジョン番号、枝番号、登録日時、作者、 状態によって指定することができます。 複数のオプションが指定された場合、 co はデフォルト枝 (通常は幹: rcs(1) の -b の項を参照) の すべての条件に合致するリビジョンのうちで最新のものを取り出します。 リビジョン番号あるいは枝番号は、以下のオプションを使って指定することが できます: -f 、 -I 、 -l 、 -M 、 -p 、 -q 、 -r 、 -u 。オプション -d (date:日時)、 -s (state:状態)、 -w (author:作者)は、 -f 、 -I 、 -l 、 -M 、 -p 、 -q 、 -r 、 -u オプションにより選択された枝またはデフォルト枝からリビジョンを選択します。

リビジョンを指定せずに RCS ファイルに対して co コマンドを適用すると、長さ 0 のワークファイルが作成されます。 co は、つねにキーワード置換を行います (下記参照)。

オプション

-r[rev]
    リビジョン番号 rev 以前 ( rev と同じものも含む) で最新のリビジョンを取り出します。 rev がリビジョンではなく枝を指定している場合、その枝上の最新のリビジョンが 取り出されます。 rev が省略された場合、デフォルト枝 ( rcs(1) の -b オプションの項を参照) の最新のリビジョンが取り出されます。 rev が $ の場合、 co はリビジョン番号をワークファイルのキーワードから取り出します。 これら以外の場合、 rev はリビジョンを示すピリオドで区切られた数字またはシンボルの列です。シンボルは、 ci(1) や rcs(1) によりリビジョン番号と結びつけることができます。

-l[rev]
    -r と同様に動作し、取り出したリビジョンをロックします。

-u[rev]
    -r と同様に動作し、取り出したリビジョンのロックを解除します。それ以前に ロックされていた場合、これも解除されます。 rev が省略された場合、 co を起動したユーザがロックしたリビジョンがあれば、そのリビジョンの ロックを解除します。さもなければ、 デフォルト枝の最新のリビジョンが対象となります。

-f[rev]
    つねにワークファイルを上書きします。後述の -q オプションを使用する場合、いっしょに -f オプションも指定すると便利な場合があります。 ファイルモード の項も参照してください。

-kkv
    ワークファイルにデフォルト形式のキーワード文字列を埋め込みます。たとえば、 キーワード Revision に対しては、文字列 $Revision: $ を生成します。ファイルがロックされるなら Header 、 Id 、 Locker キーワードにロック者名が展開されます。これがデフォルトの動作です。

-kkvl
    -kkv とほぼ同様ですが、対象となるファイルがすでにロックされていた場合に、 ロック者名が展開されます。

-kk キーワード名のみの文字列を生成し、値は省略します。たとえば、キーワード Revision に対しては、通常の $Revision: $ のかわりに、 $Revision$ を生成します。これは、異なるリビジョンの内容を比較する場合、キーワード 値の違いを無視できるので、便利です。

-ko ワークファイル中のキーワード文字列をそのまま出力します。たとえば、 ワークファイル中にキーワード文字列 $Revision: 1.1 $ があれば、出力ファイルにもそのままの文字列を埋め込みます。 単純に文字列置換を行ってはいけないバイナリファイル等を扱う場合に指定します。

-kv キーワード文字列としてキーワード値のみを生成します。たとえば、キーワード Revision に対して、通常の $Revision: $ のかわりに を生成します。これは、キーワード文字列から $Revision: $ のようなキーワード区切りを取り除くことが困難なプログラミング言語用の ファイル等を生成するために使用します。しかしながら、キーワード名が 取り除かれてしまうと、それ以降にキーワード置換を行うことができません。 このため、本オプションを -l オプションと組み合わせて使うことはできません。 また、ワークファイルの書込み権はオフになります。 後でワークファイルを編集する場合は、-kv オプションを指定せずに ワークファイルを取り出してから行います。

-p[rev]
    ワークファイルとして書き出すかわりに、対象となるリビジョンを標準出力に 書き出します。 co をパイプの一部として使用する場合に便利です。

-q[rev]
    診断メッセージを表示しません。

-I[rev]
    対話モードで動作します。たとえ標準入力が端末でなくても、ユーザに対して 問い合わせを行います。

-ddate
    選択された枝上の、指定された日付以前の登録日付を持つ最新のリビジョンを 取り出します。日付は自由形式で指定します。タイムゾーンとして LT を指定することにより、ローカル時間を使用することができます。他の一般的な タイムゾーンも使用することができます。たとえば、以下に挙げるいくつかの指定は、 Pacific 標準時における 1990 年 1 月 11 日午後 8 時と同時刻を示します (Pacific 標準時は UTC よりも 8 時間遅れです)。

        8:00 pm lt
        4:00 AM, Jan. 12, 1990	注記: デフォルトは UTC
        1990/01/12 04:00:00	RCS の日付形式
        Thu Jan 11 20:00:00 1990 LT	ctime(3) + LT
        Thu Jan 11 20:00:00 PST 1990	date(1)
        Fri Jan 12 04:00:00 GMT 1990
        Thu, 11 Jan 1990 20:00:00 -0800
        Fri-JST, 1990, 1pm Jan 12
        12-January-1990, 04:00-WET

    ほとんどの日付の項目にはデフォルト値があります。デフォルトの タイムゾーンはUTC です。他のデフォルト値は、年、月、日、時、分、秒 の順番で 決定されます。これらの項目のうち、少なくとも 1 つが指定されなければいけません。 指定のある項目よりも先に決定される項目が省略されている場合には、 現在のローカル時が採用されます。他の省略されたフィールドには最小値が 採用されます。たとえば、 20, 10:30 の場合は、現在の年、月の 20 日 10 時 30 分 00 秒が採用されます。 日付の指定に空白が含まれる場合には、日付の指定をクォートでくくる必要がある ことに注意してください。

-M[rev]
    作成されるワークファイルの最終更新日付を、取り出されるリビジョンの日付に します。本オプションを指定すると make(1) が正しく動作しなくなるので、注意して使用する必要があります。

-sstate
    選択された枝上の、状態 state を持つ最新のリビジョンを取り出します。

-w[login]
    選択された枝上の、ユーザ user によって登録された最新のリビジョンを取り 出します。 login が省略された場合は、 co を起動したユーザ名を使います。

-jjoinlist
    joinlist で指定されたリビジョンを結合した新しいリビジョン作成します。本オプションは、 旧バージョンとの互換性のために残されています。 通常、リビジョンの結合には rcsmerge(1) を用います。

    joinlist は rev2:rev3 形式のリビジョンの対をコンマで区切って並べたリストです。 ここで、 rev2 と rev3 は (シンボリックまたは数字の) リビジョン番号です。 以下の説明で、 rev1 は以下のリビジョンを示します: (1) joinlist に列挙された対のうち、 最初のものに対しては、上記の -f から -w オプションによって選択されたリビジョン。(2) それ以外の対に対しては、 直前の対から作成されたリビジョン (すなわち、1 つの対によって作成された リビジョンは次の結合のための入力となります)。

    それぞれの対に対して、 co は rev1 と rev3 を rev2 と比較しながら結合します。つまり、 rev2 を rev1 と同一にするための変更を、 rev3 のコピーに対して適用します。 rev2 を同一の祖先とする 2 つの枝の末端のリビジョン rev1 と rev3 を結合するのによく用いられます。もし、3 つのリビジョンが同一の枝上にあり、 リビジョン番号が rev1<rev2<rev3 ならば、結合の結果は、 rev3 の内容のうち、 rev1 から rev2 への変更を無効にしたものになります。 もし、 rev2 から rev1 への変更が rev2 から rev3 への変更と重複しているなら、 co は merge(1) に示したような報告を行います。

    最初に指定する対では rev2 を省略することができます。この場合は、 rev1 と rev3 の共通の祖先 リビジョンを rev2 として使用します。もし、いずれかの引数がリビジョンではなく枝を示しているなら、 その枝上の最新のリビジョンが用いられます。同時に -l オプションや -u オプションを指定すると、 rev1 がロックまたはロック解除されます。

-Vn バージョン n の RCS システムの動作をエミュレートします。 n は 3 、 4 、 5 のいずれかです。これは、古い RCS を使っているユーザと RCS ファイルを 交換するときに便利です。使用している RCS がどのバージョンかを調べるには、 適当なファイルに対して rlog を起動します。最初の数行に文字列 branch: がなければ、それはバージョン 3 です。また、日付に現れる年が 2 桁の数字 ならば、それはバージョン 4 です。どちらでもなければ、バージョン 5 です。 RCS バージョン 3 をエミュレートして作成された RCS ファイルからはデフォルト 枝の情報が失われます。バージョン 4 またはそれ以前のバージョンをエミュレート して作成されたリビジョンは、最大 13 時間ずれた日付を持つことになります。 バージョン 3 またはそれ以前のバージョンをエミュレートして取り出された ファイルには yyyy/mm/dd ではなく yy/mm/dd 形式の日付がキーワード中に展開されます。また、 $Log$ キーワードでは空白の入り方が異なります。

-xsuffixes
    RCS ファイル拡張子を指定します。詳しくは ci(1) を参照してください。

キーワード置換
テキスト中に存在する $keyword$ または $keyword:...$ 形式の文字列は、 $keyword:value$ 形式の文字列に置換されます。 keyword と value の対については後述します。キーワードはリテラルな文字列として、あるいは リビジョンを特定するためのコメントとして埋められることがあります。

まず、ユーザは $keyword$ なる形式の文字列を埋め込んで RCS ファイルに登録します。RCS ファイルから ワークファイルに取り出されるとき、 co はこの文字列を $keyword:value$ に置換します。 $keyword:value$ 形式の文字列を含むものが登録された場合、 value の部分は次に取り出されたときに新たな値に置換されます。このように、 取り出しを行うごとにキーワードの値は更新されていきます。RCS コマンドの いくつかは、 -k オプションにより、この動作を変更することができます。

キーワードの種類とその値:

$Author$
    リビジョンを登録したユーザのログイン名

$Date$
    リビジョンが登録された日時 (UTC)

$Header$
    標準的なヘッダ。RCS ファイルのフルパス名、リビジョン番号、日時、作者、 状態、ロック者が含まれます。

$Id$
    $Header$ とほぼ同様です。RCS ファイル名は、パスをつけずに埋め込まれます。

$Locker$
    リビジョンをロックしたユーザのログイン名

$Log$
    登録時に与えたログメッセージ。ヘッダとして、RCS ファイル名、リビジョン 番号、作者、日時が埋め込まれる。すでに埋め込まれているログメッセージは 変更されず、新たなログメッセージのみが $Log:...$ のあとに追加される。 ソースファイルの完全なログを記録するときに便利である。

$RCSfile$
    パス名を含まない RCS ファイル名

$Revision$
    リビジョン番号

$Source$
    RCS ファイルのフルパス名

$State$
    リビジョンに rcs(1) か ci(1) の -s オプションにより割り付けられた状態。

ファイルモード
ワークファイルは、 RCS ファイルの読み込みと実行の許可属性を受け継ぎます。 さらに、 -kv オプションが設定されていないか、厳格ロックモード ( rcs(1) 参照) でロックせずに取り出していなければ、ユーザに対する書込み権が 設定されます。

すでに、ワークファイルと同名の書込み可能なファイルが存在していると、 co は取り出しを中断し、もし可能ならば削除するかどうかを問い合わせます。 もし、すでに存在するファイルが書込み禁止であったり、 -f オプションが指定されていた場合には、問い合わせを行わずに削除します。

ファイル
co は ci とほぼ同じくらいのファイルにアクセスします。ただし、ワークファイル を読むことはありません。

環境変数

RCSINIT
    本変数に空白で区切ったオプションを設定することで、コマンドライン引数に 先立って処理されます。 詳しくは ci(1) を参照してください。

診断
RCS ファイル名、ワークファイル名、取り出されるリビジョンの番号を表示します。 処理が成功した場合は終了ステータス 0 を返します。

作者
Author: Walter F. Tichy.
Revision Number: ; Release Date: .
Copyright © 1982, 1988, 1989 by Walter F. Tichy.
Copyright © 1990, 1991 by Paul Eggert.

関連項目
ci(1), ctime(3), date(1), ident(1), make(1), rcs(1), rcsdiff(1), rcsintro(1), rcsmerge(1), rlog(1), rcsfile(5)
Walter F. Tichy, RCS--A System for Version Control, Software--Practice & Experience 15, 7 (July 1985), 637-654.

制限事項
RCS ファイル、ワークファイルのリンクは保存されません。

キーワードを $keyword:$ 以外の形式に書換える以外に、一部のキーワードのみを展開させる方法がありません。 nroff や troff ではキーワード中に空文字 \& を埋め込むことにより展開を防ぐことができます。

バグ
-d オプションが日付の解釈を間違えることがあります。また、1970 年より前の日付 を受け付けません。