6    RCS や SCCS によるソース・ファイルの管理

この章では,バージョン・コントロール・システムを使用して,プログラムまたはドキュメントのソース・ファイルを適切に管理する方法について説明します。 バージョン・コントロール・システムは,ドキュメント・リビジョンの保存,取り出し,ロギング,識別,およびマージを自動的に行います。 バージョン・コントロールは,プログラム,ドキュメント,グラフィックス,論文などの,頻繁に改訂されるテキストを管理する場合に有効です。 Tru64 UNIX では,機能の若干異なった,次の 2 つのシステムを提供します。

この章では,基本的なバージョン・コントロールの概念を紹介し,RCS コマンド,SCCS コマンド,およびユーティリティの使用方法について説明します。 概念を紹介した後に,各システムの応用的な使用方法を説明します。

この章の例は,「Orpheus Authoring Tools」と呼ばれる製品のためのキットを想定して説明しています。 例の中のキットも Orpheus 製品の 1 つであると考えてください。 このキットはドキュメント・ビルダ (document builder) なので,キット名は DCB と省略されます。 また,プロジェクト・ディレクトリは dcb_tools になります。

6.1    リビジョン制御の概要

RCS または SCCS を使用すると,ソース・ファイルをシェアード・ライブラリに保存して管理することができます。 どちらのシステムにも,簡便なコマンド行インタフェースが用意されています。 基本的なコマンドで,修正したソース・ファイルをチェックインしてバージョン・コントロール・ファイルを作成することができます。 バージョン・コントロール・ファイルには,ソース・ファイルの各リビジョンがすべて含まれます。 バージョン・コントロール・ファイルからファイルをチェックアウトして編集する場合には,システムは指定した 1 つまたは複数のリビジョンをライブラリから読み出して,編集に使用するための作業ファイルを作成します。

さらに高度なインタフェース・コマンドを使用すると,次のことができます。

RCS と SCCS のいずれをバージョン・コントロール・システムとして採用するかは,開発環境および各ユーザに固有のリビジョン・コントロールに関する要求によって決定します。 最終的には,必要とされるセキュリティと多様性の度合いによって決定することになります。表 6-1 に,それぞれのシステムで一般的に使用されているいくつかの機能の一覧を示します。

表 6-1:  RCS と SCCS の機能

機能 説明
テキストの複数リビジョンの保存と取り出し いずれのシステムの場合も,簡単な方法でファイルに対するすべての変更内容を保存し,取り出すことができる。 さらに RCS では,リビジョン番号のレンジ,シンボル名,日付,著者,および状態に基づいてリビジョンを取り出すことができる。
変更内容の完全なヒストリの保守 いずれのシステムの場合も,自動的に変更内容のログを生成する。 いずれのシステムも,各リビジョンのテキストだけでなく,著者,チェックインの日付と時刻,および変更内容を要約したログ・メッセージを格納する。
アクセスの矛盾の解決 いずれのシステムの場合も,2 人のユーザが互いに気づかずに同じファイルを変更することを防ぐ。
リビジョンのツリー構造の保守 いずれのシステムの場合も,各ファイルでの複数の開発ラインを保守できる。
複数の改訂ファイルを矛盾解決後にマージ いずれのシステムの場合も,2 つの開発ラインから変更内容をマージしてファイルを作成できる。 また,RCS の場合は,ファイルの複数のバージョンで変更が重複している場合,ユーザに警告する。
リリースおよび構成の制御 (RCS のみ) RCS では,リビジョンにシンボル名を付けて,モジュールの構成を簡単かつ直接的に説明できるようにしている。
各リビジョン識別の自動化 いずれのシステムの場合も,キーワードを使用して,ファイルのリビジョンに,名前,リビジョン番号,時刻,著者などを加えることができる。

6.2    バージョン・コントロールの概念

RCS と SCCS では,バージョン・コントロール・ライブラリと呼ばれる予約領域ディレクトリにファイルを保存します。 各ソース・ファイルの内容は,1 つのバージョン・コントロール・ファイルとして格納されます。 バージョン・コントロール・ファイルは,RCS では RCS ファイル,SCCS では s ファイルと呼ばれます。 バージョン・コントロール・ファイルには,元のファイル (SCCS では g ファイル) と,元のファイルに対応するすべての変更内容 (すなわちデルタ) が含まれます。 各デルタの内容は,誰が何のために変更を行ったのかを説明するテキストです。 変更情報そのものは,行テキストにマークを付けた形式で格納されます。 削除行または変更行は,削除のマークを付けられますが,実際には削除されません。 新規の行は,古い行を編集したバージョンか,または適切な場所に完全に新しいテキストが挿入されてマークされたものかのいずれかになります。 バージョン・コントロール・システムは,必要なバージョンに至るまでのすべての削除行と追加行を適用し,それ以降のバージョンをすべて無視することによって,ファイルの任意のバージョンを復元することができます。

RCS では,ファイル名にサフィックス ,v を付加して RCS ファイルを識別します。 たとえば,attr,v は,attr という名前のソース・ファイルに対する RCS ファイルです。

SCCS では,ファイル名にプレフィックス s. を付加して s ファイルを識別します。 たとえば,s.attr は,attr という名前のソース・ファイルの s ファイルです。図 6-1 に,典型的なバージョン・コントロール・ファイルの内容を示します。 RCS ファイルおよび SCCS ファイルは,同じ種類の情報を含んでいますが,その構成方法は異なります。

図 6-1:  バージョン・コントロール・ファイルの内容

バージョン・コントロール・ファイルの各リビジョンには,バージョン識別番号が割り当てられます。 SCCS では,この番号は SID と呼ばれます。 SCCS の識別番号には,最高 4 つの要素を含むことができます。 RCS には,その他の要素も規定されています。 最初の 2 つの要素は,そのリリース内のリリース番号とレベル番号であり,3 番目と 4 番目の要素には,ファイルの分岐バージョンに対する同じ項目,すなわちリリース番号とレベル番号 (分岐およびシーケンスと呼ばれる) を示します。6.3 節を参照してください。 リリース識別番号は 1 から始まります。 レベルの識別番号は,.1 から始まり,.1 ずつ増加します。 つまり,ファイルの最初のバージョンは 1.1,2 番目のバージョンは 1.2,というようになります。6.3 節図 6-4 に,1 つのファイルのデルタに付けられるシーケンス番号を示します。

バージョン・コントロール・ライブラリは,1 つのプロジェクトのバージョン・コントロール・ファイルがすべて保存されるディレクトリです。 RCS と SCCS には,ライブラリからファイルを取り出す場合に,2 人のユーザが同一ファイルに同時にアクセスすることを防止するロック機構があります。 ファイル・ロックについての詳細は,この節以降で説明します。

通常,使用するシステムによりライブラリの名前は RCS または SCCS になります。 図 6-2図 6-3 は,プロジェクトのメイン・ディレクトリの下に,RCS ライブラリまたは SCCS ライブラリが配置された場合に,プロジェクトのディレクトリ・ツリーがどのようになるかを示します。

図 6-2:  典型的な RCS ライブラリ

図 6-2 は,3 つの RCS ファイルを示しています。 ファイルを編集するためにライブラリからチェックアウトする場合は,図の attr ファイルに例示されるように,RCS はすべてのデルタを相互に関連付けて,指定されたバージョンのコピーを取り出します。 RCS は,RCS ファイルを編集して,ファイルをチェックアウトした人の名前を挿入します。 この情報は $Locker$ キーワードに保存されます。 RCS のキーワードの使用方法についての詳細は,6.5.2 項を参照してください。

RCS が SCCS と異なる点は,RCS がチェックイン時に強制的にファイルをロックするということです。 2 人以上のユーザが 1 つのファイルをチェックアウトできますが,最初にチェックアウトした (ロックを保持している) 人だけが,そのファイルをライブラリにチェックインすることができます。 リビジョンがロックされても,読み取り,コンパイルなどのためにチェックアウトすることはできます。 ロックを行うことによって,一度に 1 人の開発者だけしか次の更新ファイルをチェックインできないように設定できます。 すなわち,ロックを行うと,ロックした人 (ファイルを最初にチェックアウトした人) 以外がチェックインすることを防止します。

RCS ファイルがプライベートのファイルで,そのファイルにリビジョンを行っているユーザが他にいない場合は,RCS の完全ロック機能を解除することができます。 ファイルがチェックインされる際に,RCS は,ユーザの名前を $Locker$ キーワードから取り去ります。 完全ロックが解除されると,ファイルの所有者は,チェックイン時にロックする必要がなくなります。 ただし,他のユーザは必要です。 次のコマンドを実行して,完全ロックの解除と設定ができます。

% rcs -U filename
 

および

% rcs -L filename
 

ファイル・ロックについての詳細は,6.5.3 項6.5.5 項,および co(1) を参照してください。

図 6-3:  典型的な SCCS ライブラリ

図 6-3 には,SCCS ライブラリ内の,3 つの s ファイルと p.attr という名前のその他のファイルを示しています。 編集を行うためにライブラリからファイルをチェックアウトする場合は,図の attr ファイルで例示されているように,SCCS は,すべてのデルタを相互に関連付けて,指定されたバージョンのコピーを取り出します。 SCCS は,p ファイルと呼ばれるロック・ファイルも作成します。 別のユーザが同じファイルを編集するためにチェックアウトしようとすると,SCCS はファイルが編集中であることを報告し,他のユーザのアクセスを拒否します。 p ファイルには,ファイル名にプレフィックスとして英字 p が付加されます。 ファイルがライブラリにチェックインされると,SCCS は p ファイルを削除します。

6.3    ファイルの複数バージョンの管理

通常,ファイルのバージョンは,直線的に進化します。 つまり,現在のバージョンは 1 つしかありません。 この場合,ファイル識別番号は,2 つの要素で構成され,「.1」ずつ増加します。 つまり,ファイルに割り当てられる最初のバージョン番号は 1.1 であり,たとえば 8 番目は 1.8 になります。

並行してプロジェクトが行われ,同じプログラムを基本として新しいバージョンを開発している場合は,同じバージョン・コントロール・ファイルを使用することができます。 いろいろなバージョンが 1 つのライブラリ中にあるので,ツリー構造が分岐します。 たとえば,2 つのチームがファイルまたはモジュールの最新のリビジョンから別々なバージョンの開発を始めると仮定します。

2 つの開発の流れが継続されるため,図 6-4 に示すように,デルタのツリー構造は複雑なものになります。

図 6-4:  バージョン・コントロール・ファイルのツリー構造

分岐の 1 つからファイルを取り出したり,編集したりするためには,その分岐番号を指定する必要があります。図 6-4 には,(1.1,1.2,および 1.3 などのリビジョン番号を含む) 主幹部とその分岐からなるバージョン・コントロール・ファイルのツリー構造が示されています。 図のデルタ番号の最初の 2 つの要素は,分岐元のバージョン番号を反映しています。 次の 2 つの要素は,新しい要素のバージョン番号を反映しています。

例として,2 つの開発チームが 1.2 のリビジョン番号を持つファイルで作業を行っていると仮定します。 RCS と SCCS のどちらであっても,最初にファイルをアクセスしたチームに番号 1.3 を割り当てます。 バージョン・コントロール・システムは,2 番目にアクセスしたチームに番号 1.2.1.1 のデルタを作成します。 このデルタは,番号 1.2 から分岐する最初のデルタなので,バージョン番号の後ろ 2 つの要素は 1.1 になります。

2 つのバージョンが開発されるにつれて,どちらのバージョンからでも分岐を作成することは可能です。 たとえば,リビジョン番号 1.2.1.4 の作成後に,リビジョン番号 1.2.1.3 から新しいファイルを分岐することができます。

RCS と SCCS の分岐についての詳細および個々の例については,6.5.5 項6.6.5 項を参照してください。

6.4    バージョン・コントロール・ライブラリの作成

開発プロジェクトで使用するバージョン・コントロール・システムを選択した後,RCS ファイルまたは SCCS ファイルを格納するためのディレクトリを作成する必要があります。 開発プロジェクトのサイズや複雑さによっては,ディレクトリおよびソース・ファイルの所有権と保護の設定についてシステム管理者に助言を求めることも必要になるでしょう。

ディレクトリをセットアップする際に,ディレクトリの所有権を rcs または sccs のユーザ ID に設定すると,rcs または sccs 以外のユーザがディレクトリに書き込むことを防止するようなパーミッションを設定できます。 この方法により,RCS または SCCS だけがライブラリ内のファイルを直接変更できるため,セキュリティは向上します。

sccs コマンドを実行する場合は,図 6-3 に示すように,ライブラリのディレクトリは SCCS という名前でなければなりません。 ライブラリのディレクトリが SCCS という名前でない場合は,sccs コマンドに -d オプションを付けて,ライブラリのファイルをアクセスする必要があります。 SCCS のオプションについては,表 6-8 を参照してください。 RCS では,ディレクトリ名は RCS でなければなりません。 それ以外の場合は,RCS ファイルに完全なパス (絶対パスまたは相対パス) を指定する必要があります。

6.5    RCS の使用方法

以降の項では,RCS の次の機能について説明します。

RCS システムは,テキスト・ファイルのバージョン・コントロールのタスクを補助する,1 組の UNIX コマンドのセットを提供します。 それは,生産および開発の両方の環境で使用されるために設計されているため,柔軟性とファイル・アクセスの制御に優先順位が置かれています。 生産環境の場合は,アクセス制御によって更新時の矛盾を検出したり,変更の重複を防止することができます。 変更が頻繁に起こる開発環境の場合は,さほど厳密な制御は必要ないため,個々のプロジェクトのニーズに合わせて容易に制御を変更することができます。

RCS システムは,1 組の独立したコマンドのセットで構成されています。表 6-2 に,提供されている RCS コマンドをリストします。 使用可能なコマンド・オプションについての詳細は,該当するリファレンス・ページを参照してください。

表 6-2:  RCS コマンド機能の要約

コマンド 機能
ci リビジョンのチェックイン。 作業ファイルの内容を,対応する RCS ファイルの新しいリビジョンとして保存する。
オプション 機能
-u または -l これらのオプションのいずれかを使用すると,チェックイン時に作業ファイルは削除されない。
-r チェックインするファイルにリビジョン番号を割り当てる。
-k チェックインされたファイル内の識別マーカを検索し,新しいリビジョンを割り当てる。
co リビジョンのチェックアウト。 リビジョン番号,日付,著者,および状態の属性に応じてリビジョンを検索する。 常に識別マーカ (キーワード) を展開する。
オプション 機能
-l ファイルのチェックアウト時にリビジョンをロックし,複数のユーザが同じファイルに作業を行った場合の変更の重複を防止する。
ident ファイルから識別マーカを取り出し,プリントする。 識別マーカ (キーワード) は常に co によって展開される。
rcs RCS ファイル属性の変更。 変更は管理者が行わなければならない。 アクセス・リストの変更,ファイルのロック属性の変更,状態属性と文字によるリビジョン番号の設定,記述の変更,およびリビジョンの削除を行う。 リビジョンが削除できるのは,その他の分岐の起点となっていない場合のみ。
オプション 機能
-L 完全なファイル・ロック・モードを設定する。 これは,RCS ファイルの所有者が,チェックイン時に RCS ファイルをロックしなければならないことを意味する。 省略時の設定はシステム管理者が決定する。
-U 不完全なファイル・ロック・モードを設定する。 これは,ファイルの所有者が,チェックイン時にファイルをロックする必要がないことを意味する。 省略時の設定はシステム管理者が決定する。
rcsclean 作業ディレクトリを整理する。 チェックアウトされたが,変更が行われなかった作業ファイルを削除する。
rcsdiff コマンドを使用して,2 つのリビジョンを比較し,その違いをプリントする。 比較されるリビジョンのうちの 1 つはチェックアウトされているものでもかまわない。 このコマンドは,変更内容の検索に有効である。
rcsfreeze 構成を凍結する。 すべての RCS ファイルの指定されたリビジョンに,同一名で,文字によるリビジョン番号を割り当てる。 このコマンドは,構成の正確な記録に有効である。
rcsmerge 共通の祖先に基づいて,2 つのリビジョン,rev1 および rev2 をマージする。 3 つのファイルの比較は,行の 1 部分に対して,3 つのリビジョンがすべて同じか,2 つのリビジョンが同じか,あるいは,3 つのリビジョンがすべて違うかを判断することによって行われる。 重複する変更内容にはフラグを立て,ユーザに報告する。
オプション 機能
-p マージしたファイルの結果を標準出力にプリントする。 このオプションを指定しないと,マージした結果のファイルは作業ファイルに重ね書きされる。
rlog ログ・メッセージを読み取る。 RCS ファイルのログ・メッセージおよびその他の情報をプリントする。 たとえば,RCS ファイル名,作業ファイル名,ヘッド (主幹部の最新のリビジョン番号),省略時の分岐,アクセス・リスト,ロック,シンボル名,リビジョン番号,および記述テキスト。
オプション 機能
-h RCS ファイル名,作業ファイル名,ヘッド,省略時の分岐,アクセス・リスト,ロック,シンボル名,およびサフィックスのみをプリントする。
-t -h オプションでプリントする情報の他に,記述テキストもプリントする。

6.5.1    RCS ライブラリへの新しいファイルの配置

ci コマンドを実行すれば,新しいファイルをライブラリに置くことができます。 次の例では,ライブラリの親ディレクトリにユーザがいて,attr ファイルをライブラリに追加すると仮定しています。

% ci attr
RCS/attr,v  <---- attr
enter description, terminateted with single '.' or end of file:
>> Orpheus Authoring Tools attr command
>> .
initial revision: 1.1
done
 

ci コマンドは,RCS ファイル attr,v を作成し,その中に attr をリビジョン 1.1 として保存します。ci コマンドは,記述を入力するように要求してきます。 記述とは,ファイルの内容の概要です。 これ以降にチェックイン・コマンドを実行すると,ログ・エントリの入力を要求してきます。 ログ・エントリとは,変更内容の要約のことです。

次に示すように,1 回の操作で複数のファイルを入力することができます。

% ci attr docbld dcb.ch-intro
 

6.5.2    RCS によるファイル識別情報の記録

RCS システムでは,ファイル識別情報を提供するためのキーワードまたは ID マーカをソース・ファイルに含めるための構文を提供しています。 ID マーカは,キーワードをドル符号 ($) で囲んだものです。 RCS ライブラリからファイルを取り出す際に,RCS は,キーワードをファイル名またはリビジョン番号などの適切な情報に置き換えて展開します。

RCS では,ファイルの任意の場所にキーワード・マーカをリテラル文字列またはコメントとして使用し,リビジョンを確認することができます。 たとえば,テキスト・ファイル内にマーカ $Header$ を置いた場合は,(co コマンドを実行すると) RCS は,このキーワードを次のような情報に置き換えます。

$Header: full_pathname/filename rev_num yyyy/mm/dd HH:mm:ss author
state $
 

表 6-3 に,RCS キーワードとそれに対応する値をリストします。

表 6-3:  RCS ID キーワード

キーワード 説明
$Author$ 当該リビジョンをチェックインしたユーザのログイン名。
$Date$ 当該リビジョンをチェックインした日付と時刻。
$Header$ RCS ファイルの完全パス名,リビジョン番号,日付,著者,状態。 ロックされている場合は,ロックしたユーザ名からなる標準のヘッダ。
$Id$ RCS ファイル名がパスなしで示される以外は標準ヘッダと同じ。
$Locker$ 当該リビジョンをロックしているユーザのログイン名。 ロックしていない場合は空。
$Log$ チェックイン時に出力されるログ・メッセージ。 先頭に RCS ファイル名,リビジョン番号,著者,および日付を含むヘッダが付く。 既存のログ・メッセージは置換されず,代わりに,新しいログ・メッセージが $Log:...$ の後に挿入される。
$RCSfile$ パスなしの RCS ファイルの名前。
$Revision$ 当該リビジョンに付けられたリビジョン番号。
$Source$ RCS ファイルの完全パス名
$State$ rcs または ci-s オプションによって当該リビジョンに付けられた状態。

ident コマンドは,オブジェクト・ファイルやダンプなど,どのようなファイルからでもキーワードを見つけて,抽出することができます。ident コマンドは,指定したファイル内で,パターン $keyword:...$ の出現をすべて検索します。 たとえば,C プログラム myfile.c に,次の情報が含まれていると仮定します。

char resid [] = "$Header: Header information$"
 

ident コマンドを実行すると,次のようにプリントされます。

myfile.c : $Header: Header information$"
 

RCS でのキーワードの使用についての詳細は, co(1) を参照してください。

6.5.3    RCS ライブラリからのファイルの取り出し

RCS ファイルから,特定のファイルのリビジョンを取り出すには,co コマンドを実行して RCS ライブラリからそのリビジョンをチェックアウトします。co コマンドは RCS ファイルから当該リビジョンを取り出して,それを対応する作業ファイルに保存します。

RCS ファイルのリビジョンは,ロックして,あるいはロックせずにチェックアウトすることができます。 リビジョンをロックすると,更新の重複を防止できます。 編集以外 (たとえば,参照または実行) のためにファイルをチェックアウトする場合は,リビジョンをロックする必要はありません。 編集のためにチェックアウトし,後でチェックインをするリビジョンは,必ずロックしておかなければなりません。 次に例を示します。

% cd /usr/projects/dcb_tools
 
% co -u attr
RCS/attr,v ----> attr
revision 1.6 (unlocked)
done
 

このコマンドは,RCS ファイルの最新のバージョンの (キーワード情報を含んだ) コピーを作成し,現在のディレクトリ (この例では /usr/projects/dcb_tools) に取り出します。-u オプションを付けると,RCS はファイルをロックしません。 任意の古いバージョンのコピーを取り出すには,-r オプションを使用します。 たとえば,現在のバージョンが 1.8 のファイルのバージョン 1.5 を取り出す場合は,次のようなコマンドを実行します。

% cd /usr/projects/dcb_tools
 
% co -r1.5 attr
RCS/attr,v ----> attr
revision 1.5
done
 

1 回の co コマンドで,複数のファイルを取り出すこともできます。 たとえば,次のように実行します。

% co attr unstamp
RCS/attr,v ----> attr
revision 1.5
done
 
RCS/unstamp,v ----> unstamp
revision 1.2
done
 

6.5.4    編集済みファイルの RCS ライブラリへのチェックイン

1 つまたは複数の編集済みファイルを戻すには,ci コマンドを実行します。 このコマンドは,各作業ファイルの内容を,対応する RCS ファイルに置き換えます。 通常,RCS では,ライブラリに再配置されるリビジョンが元のファイルと異なっているかどうかをチェックし,ユーザに警告します。

また,ci コマンドはチェックイン時に作業ファイルを削除してしまうため,チェックアウト処理を暗黙に実行するために作業ファイルを保持するには,-l オプションまたは -u オプションを使用します。 現在のリビジョンをセーブした後に編集を続ける場合は,-l オプションまたは -u オプションとともに ci コマンドを使用してください。

6.5.5    複数バージョンを持つファイルの操作

6.3 節では,バージョン・コントロール・システムの分岐概念の概要を説明しています。 この項の解説では,RCS が複数ファイルの分岐を処理する例をいくつか示します。

RCS は,ファイル・リビジョンをデルタのツリー構造として配置します。 リビジョン・ツリー構造の各ファイルに含まれる情報は,リビジョン番号,チェックイン時刻および日付,著者の識別情報,ログ・エントリ,状態,ならびに実際のテキストです。 これらのファイル属性はすべて,リビジョンがライブラリにチェックインされる際に決定されます。 状態属性は,リビジョンの状態を示します。 チェックイン時には「テスト中」に設定されますが,後で確定またはリリース済に変えることもできます。

ci コマンドは,通常は 1.1 の番号を割り当てられたルート・リビジョンを持ったリビジョン・ツリー構造を作成します。 リビジョン番号を明示しない限り,ci は 1.2,1.3,1.4 というように直前のリビジョンのレベル番号を増分して新しいリビジョン番号を付けます。 新しいリリースを開始するには,次の 2 つのコマンドのいずれかを使用します。

% ci -r2.1 unstamp
 

または

% ci -r2 unstamp
 

このアクションによって,新しいリビジョンに 2.1 という番号が割り当てられます。-r オプションを付けずにファイルをライブラリにチェックインすると,ファイルのリビジョンが新しくなるにつれ,自動的に 2.2,2.3 のように番号が割り当てられます。

2 つの開発チームが unstamp コマンドのリビジョン番号 1.2 から始まる別々なリリースで開発を始めると仮定します。 この時点では,両方のチームとも,-l オプションを付けて co コマンドを実行し,最新リビジョンをチェックアウトすることができます。 次のように入力します。

% co -l unstamp
 

ファイルの編集後に,最初のチームは,ci コマンドを使用してファイルをチェックインすることができます。 RCS は,新しいリビジョン番号が 1.3 であるという警告を発します。 次の例のようになります。

% ci unstamp
RCS/unstamp,v  <---- unstamp
new revision 1.3; previous revision 1.2
enter log message:
(terminate with a ^D or single '.')
>> Changed defaults check.
>> .
done
 

2 番目のチームが同じアクションでファイルをチェックインしようとすると,RCS は次のメッセージを表示します。

RCS/unstamp,v <----- unstamp
ci error: no lock set by user-name
 

この時点で,2 番目のチームは,次のように ci コマンドを使用して分岐を作成することができます。

% ci -r1.3.1 unstamp
 

このアクションの結果,リビジョン番号 1.3.1.1 を持つ分岐が作成されます。 この分岐に沿って開発を続けるために,2 番目のチームは,現在の分岐のリビジョン番号を,以降に行うすべてのファイルのチェックアウトに使用する必要があります。 次に例を示します。

% co -r1.3.1.1 unstamp
 

RCS での新しい分岐の作成は,ci コマンドを使用して実行されます。 特定の分岐に従って開発を続けるには,co コマンドで -r オプションを使用します。

ここまでの解説では,RCS が各ファイルのリビジョンを処理する方法について説明しました。 RCS システムでは,ファイルをグループまたはセット単位で指定して作業することもできます。 RCS でのファイル構成についての詳細は,6.5.8 項を参照してください。

6.5.6    RCS ファイルの差異の表示

rcsdiff コマンドを実行すると,RCS ファイルのバージョン間の差異を確認できます。

rcsdiff コマンドは,diff(1) を実行して,任意の RCS ファイルの 2 つのリビジョンを比較します。 たとえば,(1.8,編集すると 1.9 になる) attr ファイルの最新バージョンと直前のバージョン (1.7) の差異を見つけるには,次のコマンドを実行します。

% rcsdiff -r1.7 attr
=====================================
RCS file: RCS/attr,v
retrieving revision 1.7
diff -r1.7 attr
31d30
<# and is version linked to the docbld command
 

attr ファイルのバージョン 1.3 と 1.4 の差異を確認する場合は,次のコマンドを実行します。

% rcsdiff -r1.3 -r1.4 attr
====================================
RCS file: RCS/attr,v
retrieving revision 1.3
retrieving revision 1.4
diff -r1.3 -r1.4
5a6
< uts=-04
---
> uts=-05
 

6.5.7    RCS ファイルのリビジョン・ヒストリの報告

rlog コマンドを実行して,ファイルのリビジョン・ヒストリを調べます。 たとえば,rlog コマンドによって次のような詳細な情報が提供されます。

% rlog unstamp
RCS file:        RCS/unstamp,v;  Working file:     unstamp
head:            1.2
branch:
locks:           ;  strict
access list:
symbolic names:
comment leader:  "#  "
total revisions: 2;    selected revisions: 2
description:
unstamp source file
_________________________
revision 1.2
date: 92/06/09 15:51:16;  author:gunther;  state:Exp;  lines
added/del:
Fixed copyright notice
_________________________
revision 1.1
date: 92/06/09 15:49:16;  author:gunther;  state:Exp;
Initial revision
 

rlog コマンドを実行した場合に,使用可能となる情報のタイプと量に注意してください。 RCS は,各 RCS ファイルに対して次の情報をプリントします。

この情報の後には,各分岐ごとに,選択されたリビジョンのエントリが逆の年代順で続いています。 オプションを指定せずに入力した場合,rlog は,選択したファイルの情報をすべてプリントします。rlog コマンドの出力を制限するためのオプションの使用方法についての詳細は, rlog(1) を参照してください。

6.5.8    構成の制御の概念

RCS での構成とは,ファイル・リビジョンのグループまたはセットを指します。 その中では,各リビジョンは,異なるファイル・リビジョンのグループから構成されています。 ファイル・リビジョンは,一定の基準に従って選択 (チェックアウト) されます。 次の選択基準に基づいて RCS ライブラリからファイルのセットをチェックアウトすることができます。

6.6    SCCS の使用方法

SCCS システムは,いくつかの独立したコマンドで構成されています。 それぞれのコマンドは,単独で使用することもできます。 sccs コマンドは統合されたインタフェースです。 最も一般的な SCCS コマンドの使用方法を簡素化したもので,複数のコマンドの動作を結合して,いくつかの機能を追加しています。 ただし,個々のコマンドのすべての機能をサポートしているわけではありません。

sccs コマンドの形式には必ず,キーワード sccs と,edit のような関数の名前が含まれます。 その後ろに,オプションと処理するファイルの名前を指定します。表 6-4sccs コマンドです。 表の後の項で,これらのコマンドのいくつかについて詳しく説明します。 この解説では,必要な場合を除きコマンド・オプションが省略されています。 また,独立した下位レベル・コマンドが存在するコマンドについては,表中で示されています。 個々のすべてのコマンドの一覧は,表 6-9 に示されています。 使用方法についての詳細な情報,およびオプションについての説明は,各リファレンス・ページを参照してください。

表 6-4:  sccs コマンド機能の要約

コマンド名 下位レベル 説明
admin あり s ファイルの作成または既存の s ファイルの特性の変更。
check なし 編集中のファイルおよび編集しているユーザ名の報告。info と異なり,check は,意味のある終了ステータスを返す。 また,編集中のファイルがない場合は,レポートを表示しない。
clean なし 指定された s ファイルから復元可能なすべてのファイルを,ディレクトリから削除する。
create なし g ファイルを削除せずに s ファイルを作成する。
deledit なし delta を行った後,同じファイルに対して edit を行う。
delget なし delta を行った後,同じファイルに対して get を行う。
delta あり 編集済みのg ファイルをライブラリにチェックインさせる。 その際,変更内容およびヒストリを記録する。 p ファイルを削除する。
diffs なし 編集のためにチェックアウトされた g ファイルと,s ファイルから復元された古いバージョンを比較する。
edit なし 編集のために s ファイルをチェックアウトする。 g ファイルを再作成してユーザのディレクトリに置く。 p ファイルを作成する。
fix なし 最新のデルタを削除し,再編集のために g ファイルを取り出す。rmdel に続けて edit を入力することと同じ。
get あり g ファイルの再作成。 通常は,編集以外の目的に使用する。 編集のために g ファイルを再作成する場合は,通常,sccs get -e と同じ機能を持つ sccs edit コマンドを実行する。
help あり コマンド名または SCCS メッセージ番号を指定すると,その項目についての情報を表示する。 独立したコマンド形式は,sccshelp である。 各 SCCS メッセージには,識別コードがある。 たとえば,「no ID keywords」メッセージの識別コードは cm7 である。sccs help cm7 コマンドは,このエラーについての記述を表示する。sccshelp delta コマンドは,delta コマンドの構文ダイアグラムを返す。
info なし 編集中のファイルと編集しているユーザの名前を報告する。
print なし 指定した 1 つまたは複数のファイルのリビジョン・ヒストリを表示する。 さらに,各行の先頭に ID 情報を追加した SCCS ファイルを表示する。
prs あり 指定した 1 つまたは複数のファイルのリビジョン・ヒストリを表示する。
prt なし prs と同じ。
rmdel あり 指定の s ファイルの指定の分岐から最新のデルタを削除する。
sccsdiff あり s ファイルの 2 つのバージョンを比較する。 s ファイル名は,明示的に指定しなければならない。
tell なし 編集中のファイルについての報告をする。info と異なり,ファイル名だけが報告される。
unedit なし g ファイルの編集を打ち切る。 p ファイルを削除して,他のユーザがチェックアウトできるように s ファイルを解放する。 作業ディレクトリに g ファイルが存在する場合は,sccs unedit は,それを削除し,s ファイルに対して get コマンドを実行する。 g ファイルが存在しない場合は,get コマンドは実行されない。unget コマンドと同じ。
what あり ファイル中の SCCS ID パターンを探索し,それに続くテキストを表示する。

6.6.1    SCCS ライブラリへの新しいファイルの配置

sccs create コマンドを実行して,新しいファイルをライブラリに配置することができます。 次の例では,現在ライブラリの親ディレクトリから attr ファイルをライブラリに追加すると仮定します。

% sccs create attr
attr:
1.1
141 lines
 

指定するファイル名にプレフィックス s を含めてはなりません。 SCCS では自動的に適用されるためです。

1 回の操作で複数のファイルを入力することができます。 次に例を示します。

% sccs create attr docbld dcb.ch-intro
 

ライブラリに s ファイルを作成した後に,sccs create コマンドは元のファイル名にプレフィックスとしてコンマを付加します。 たとえば,attr,attr になります。 このアクションは,キーワード (もしあれば) を展開しないままで,元の g ファイルを保持します。 さらに,SCCS では,get コマンドを実行してファイルのコピーを取り出すことができます。 取り出されたバージョンは,配布することができます。

次の構文を使用して,sccs admin -i コマンドでライブラリにファイルを挿入することもできます。

sccs admin -i [ [path/] ] [input-file ] [ [path/] ] [s-filename]

次に例を示します。

% sccs admin -iunstamp unstamp
 

path/input-file には,入力ファイルを指定します。 このファイル名のいかんにかかわらず,s ファイル名は,「s.s-filename」となります。-i オプションと path/input-file の間にはホワイト・スペースを入れないでください。 s-filename にプレフィックス s を付けてはなりません。 SCCS では自動的に適用されます。admin -i コマンドを実行すると,元の g ファイル名の書き換えと,キーワードを展開したバージョンの取り出しを行いません。admin コマンドの使用方法についての詳細は,6.6.8 項を参照してください。

短いシェル・スクリプトで複数のファイルを入力するには,admin -i オプションを使用します。 次のコマンド行の例は,csh で実現されます。

% foreach x (attr docbld dcb.ch-intro)
? sccs admin -i$x $x
? end
 

6.6.2    SCCS によるファイル識別情報の記録

SCCS システムでは,ソース・ファイルに ID キーワードを指定するための構文を用意しており,ファイル識別情報を提供します。 ID キーワードは,パーセント記号 ( % ) で囲まれた単一の英字で構成されます。 編集以外の目的でファイルを取り出す場合は,SCCS は,各 ID キーワードを SID またはファイル名などのような適切な情報に置換して展開します。表 6-5 は SCCS ID キーワードのリストです。

表 6-5:  SCCS ID キーワード

キーワード 説明
%B% 取り出された g ファイルの分岐番号。
%C% g ファイルの現在の行の番号。 プログラムから出力されたメッセージを確認することを目的としている。
%D% get コマンドにより取り出された g ファイルの取り出し日付。 フォーマットは,yy/ mm/ dd
%E% デルタの作成日。 フォーマットは,yy/ mm/ dd
%F% s ファイルのファイル名。
%G% デルタの作成日。 フォーマットは,mm/ dd/ yy
%H% get コマンドにより取り出された g ファイルの取り出し日付。 フォーマットは,mm/ dd/ yy
%I% 取り出されたファイルに適用された最も高い SID。
%L% 取り出された g ファイルのレベル番号。
%M% 現在のモジュール (ファイル) 名。 たとえば,prog.c
%P% s ファイルの完全パス名。
%Q% s ファイルの q フラグの値。
%R% 取り出された g ファイルのリリース番号。
%S% 取り出された g ファイルのシーケンス番号。
%T% getコマンドにより取り出された g ファイルの取り出し時刻。 フォーマットは,hh: mm: ss
%U% デルタの作成時刻。 フォーマットは,hh: mm: ss
%W% %Z%%M% [Tab] %I% の簡易入力。
%Y% admin コマンドで設定される t フラグの値のための位置保持記号。 SCCS では無効。
%Z% what コマンドが検出できるようにするための文字列 @(#) に展開される位置保持記号。

SCCS は,ファイル上の任意の場所にある ID キーワードを処理します。 SCCS what コマンドの目的は,ファイル中の展開されたID キーワードを検出して表示することです。what コマンドは,文字列 @(#) を含む行を検索し,それらの行を表示します。 文字列 @(#) は,%Z% キーワードまたは %W% 簡易入力キーワードで生成されます。what コマンドの例を,次に示します。

% what /usr/bin/attr
/usr/bin/attr:
        attr 1.8 of 4/15/92
 

この例で表示された行は,シェル・スクリプトの一部で,次のようにコード化されています。

# SCCSID: %Z%%M% %I% of %G%
 

ファイルに ID キーワードが含まれていない場合,SCCS はファイルがライブラリに配置された時点と,そのファイルが取り出された時点に,このことを報告します。 ファイルに i フラグを設定すると,ID キーワードが含まれていないということが致命的なエラーになるように指定することができます。 ファイル・フラグについての詳細は,6.6.8 項を参照してください。 i フラグの目的は,delta コマンドが,展開されたキーワードを持つ,あるいはキーワードがない g ファイルと s ファイルとをマージするのを防ぐことです。

6.6.3    SCCS ライブラリからのファイルの取り出し

SCCS ライブラリからファイルを取り出すのには 2 つの理由があります。 配布など編集以外で使用するため,および編集のためです。

ファイルは,直線的に変化するバージョン・ヒストリとして編集することも,あるいは,分岐したツリー構造を作成して編集することもできます。 同じ s ファイルに,複数の平行したバージョンが一緒に保存される場合のツリー構造の作成方法を,6.6.5 項に説明します。

6.6.3.1    編集以外の目的でのファイルの取り出し

編集以外の目的で SCCS ファイルを取り出す場合は,sccs get コマンドを実行します。 次に例を示します。

% cd /usr/projects/dcb_tools
 
% sccs get attr
1.8
126 lines
 

このコマンドは,展開された SCCS キーワード (表 6-5 を参照) を持つ,s ファイルの最新のバージョンのコピーを作成し,それを現在のディレクトリ (この例では /usr/projects/dcb_tools) に置きます。 任意の古いバージョンのコピーを取り出すには,-r SID オプションを使用します。 たとえば,現在バージョン 1.8 であるファイルのバージョン 1.5 を取り出すには,次のコマンドを実行します。

% cd /usr/projects/dcb_tools
 
% sccs get -r1.5 attr
1.5
128 lines
 

SCCS ファイルのより複雑なツリー構造の管理については,6.6.5 項を参照してください。

-p オプションを使用すると,ファイルを取り出した後で,暗黙に s ファイルと同じ名前の g ファイルを作成する代わりに,標準出力に書き込むことができます。 詳細については, get(1) を参照してください。

6.6.3.2    編集のためのファイルの取り出し

ファイルを編集する場合は,sccs edit コマンドでライブラリからファイルをチェックアウトします。 たとえば,次のようにします。

% sccs edit attr
1.8
new delta 1.9
126 lines
 

sccs edit コマンドは,SCCS キーワードを展開しないで s ファイルの最新のバージョンのコピーを作成し (表 6-5を参照),編集用として現在のディレクトリに格納します。sccs edit コマンドはまた,編集用にファイルをチェックアウトしたユーザを識別する p ファイルも作成します。

sccs info コマンドを実行すれば,ファイルの状態をチェックすることができます。 次に例を示します。

% sccs info
unstamp: is being edited: 1.4 1.5 gunther 99/03/07 10:42:19
 

get -e コマンドを実行して,編集のためにファイルを取り出すこともできます。

6.6.3.3    複数ファイルおよび新しいリリースの管理

1回の get コマンドまたは edit コマンドで,複数のファイルを取り出すことができます。 次に例を示します。

% sccs get attr unstamp
SCCS/s.attr:
1.8
126 lines
SCCS/s.unstamp:
1.2
55 lines
 

1 つまたは複数のファイル名の代わりに SCCS という名前を指定した場合は,SCCS はライブラリのすべての s ファイルを取り出します。

ファイルの新しいリリースを作成するには,sccs edit コマンドに -r オプションを指定して,新しいリリース番号を取り出します。 たとえば,次のコマンドでは docbld ファイルのリリース 2 が作成されます。

% sccs edit -r2 SCCS
SCCS/s.docbld:
1.50
new delta 2.1
1042 lines
SCCS/s.dcb_defaults:
1.50
new delta 2.1
63 lines
SCCS/s.dcb_diag.sed:
1.50
new delta 2.1
188 lines
 

6.6.4    編集済みファイルの SCCS ライブラリへのチェックイン

ライブラリに編集済みファイルを再配置するには, sccs delta コマンドを実行します。 SCCS はコメントの入力を求めます。 次に例を示します。

% sccs delta attr
 
Comments? (^D to end)
 
Changed defaults check.  Now looks only for "flc="
 
[Ctrl/D]
 
1.9
4 inserted
4 deleted
124 unchanged
 

1 つまたは複数のファイル名の代わりに SCCS という名前を指定した場合には,SCCS は,ライブラリのすべての s ファイルに対して delta コマンドを実行します。 この機能は,同様の指定をした edit コマンドと一緒に使用すると,セットのうちいくつかのファイルだけを編集し,セット全体を同じバージョンで保存する場合に有効です。 SCCS は一度だけコメントを要求し,各ファイルに同じコメントが適用されます。

sccs delget コマンドおよび sccs deledit コマンドは,delta を実行し,get または edit の各処理を実行します。

6.6.5    複数バージョンを持つファイルの操作

6.3 節に,バージョン・コントロール・システムの分岐概念の概要を説明しました。 この項では,ファイルの複数バージョンの分岐が SCCS によって処理される例を,いくつか示します。

2 つの開発チームが,unstamp ファイルの SID1.2 を分岐点として,別々のバージョンで開発を始める場合を例にします。 分岐を使用するためには,sccs admin -fb コマンドを次のように実行します。

% sccs admin -fb unstamp
 

最初のチームは,次のような edit コマンドを実行して,バージョン 1.3 を作成します。

% sccs edit unstamp
1.2
new delta 1.3
55 lines
 

2 番目のチームは,次のような edit -b コマンドを実行して,分岐を作成します。

% sccs edit -b unstamp
1.2
new delta 1.2.1.1
55 lines
 

現在,unstamp ファイルのツリー構造が,主幹部と番号 1.2.1,1.2.2,1.3.1 の分岐からなると仮定します。 配布のために,分岐 1.2.2 から最新バージョンを取り出すには,次のコマンドを実行します。

% sccs get -r1.2.2 unstamp
1.2.2.1
55 lines
 

SCCS ツリー構造がより複雑になると,取り出すデルタをあらかじめ知る必要があるため,編集用の最新のデルタを確実に取り出すことが困難になります。sccs get コマンドと sccs edit コマンドに -t オプションを付けて使用すると,SID によらず,確実に最新のデルタを指定することができます。

sccs edit -i コマンドでマージしたいバージョンを指定すると,分岐した SCCS ファイルを主幹部にマージして戻すことができます。 たとえば,次のコマンドは,1.2.1.1 から 1.2.1.3 の範囲のすべてのデルタを含んだ,unstamp コマンドのバージョン 1.5 を作成します。 指定された変更内容がすべて含まれるように,各デルタは,相互の関連付けが行われます。

% sccs edit -i1.2.1.1-1.2.1.3 unstamp
Included:
1.2.1.1
1.2.1.2
1.2.1.3
1.4
new delta 1.5
55 lines
 

6.6.6    SCCS ファイルの差異の表示

SCCS ファイルのバージョン間の差異を確認することができます。 ファイルの形式によって,sccs diffs コマンドまたは sccsdiff コマンドのいずれかを使用します。

sccs diffs コマンドは,g ファイルを,s ファイルの指定されたバージョンと比較します。 たとえば,attr ファイルの最新バージョン (1.8 であり,編集後 1.9) と直前のバージョン (1.7) の差異を検出する場合には,次のコマンドを実行します。

% sccs diffs -r1.7 attr
 
------- attr -------
31d30
<#     and is version-linked to the docbld command
 

attr ファイルのバージョン 1.3 と 1.4 の差異を確認する場合には,次のコマンドを実行します。

% sccs sccsdiff -r1.3 -r1.4 SCCS/s.attr
< uts=-04
---
> uts=-05
 

この例のように,s ファイルは,パス名で指定することができます。 このように設計されているため,SCCS ライブラリのあるディレクトリに移動しなくても,任意のディレクトリからこのコマンドを実行することができます。

6.6.7    SCCS ファイルのリビジョン・ヒストリの報告

sccs prs コマンドを実行して,ファイルのリビジョン・ヒストリを確認することができます。 次に例を示します。

% sccs prs unstamp
SCCS/s.unstamp:
 
D 1.2 99/03/20 11:23:36 gunther 2 1      00000/00006/00055    [1]
MRs:                                                          [2]
COMMENTS:                                                     [3]
Fixed copyright notice
 
D 1.1 99/03/19 09:39:11 gunther 1 0      00061/00000/00000
MRs:
COMMENTS:
date and time created 99/03/19 09:39:11 by gunther
 

上の例のコールアウトで示された,DMRs,および COMMENTS の各キーワードは,SCCS キーワードの一部です。 sccs help コマンドを実行すると,キーワードおよびその意味のリストが表示されます。

  1. D キーワードは,デルタ情報を示します。gunther (プログラマのユーザ名) の後の 2 つの数字は,新旧のリビジョン・レベルを示します。 スラッシュで区切られた数字はそれぞれ,追加行,削除行,変更なしの行の数を示します。 [例に戻る]

  2. キーワード MRs によって,主リビジョンが表示されます。 ここで,主リビジョンとは,ファイルの SID の最初の要素のことです。 [例に戻る]

  3. COMMENTS キーワードは,自由な書式での履歴情報を記録する場所を提供します。 [例に戻る]

sccs get -m コマンドを実行してファイルを取り出すと,プレフィックスとして各行に SID 番号が付加されたファイルが取り出されます。 この方法で取り出されたファイルは,取り出したバージョンで,どのデルタがどの行を生成しているかを示します。 デルタは,新しいデルタによって重ね書きされている可能性があることに注意してください。 特定の変更を見るためには,-r オプションを使用する必要があります。

6.6.8    管理機能の実行

sccs admin コマンドには,いくつかの管理用機能があります。 各機能は,表 6-6 に示されているように,admin コマンドに付けるオプションで指定します。

注意

システム管理者は,管理者だけが使用できるように admin コマンドの許可を設定することができます。

表 6-6:  SCCS admin コマンドのオプション

オプション 説明
-auser s-file 指定されたユーザを,指定の s-file を変更できるユーザのリストに追加する。 ユーザ名はグループ ID でもよい。 その場合,そのグループのユーザすべてが追加される。
-dflag s-file s-file の,指定されたフラグをオフに (削除) する。
-euser s-file 指定されたユーザを,指定の s-file を変更できるユーザのリストから削除する。 ユーザ名はグループ ID でもよい。 その場合,そのグループのユーザはすべて削除される。
-fflag s-file s-file の,指定されたフラグをオンにする。
-h s-file 指定の s-file の構造をチェックし,新しく計算されたチェックサムと,s-file に保存されているチェックサムを比較する。 このオプションは,事故による損傷,および,SCCS コマンド以外で直接 SCCS ファイルを変更した際に起こる損傷の発見に役立つ。
-iinput-file s-file input-file を初期内容として,SCCS/s.s-file を作成する。sccs create と異なり,admin -i は,g-file の名前の変更や,s-file のコピーを取り出さない。g-file は,未変更のまま現在のディレクトリに格納される。
-mMR-list s-file 変更要求 (MR) 番号のリストを指定すると,初期デルタの作成理由として SCCS ファイルに挿入される。
-ns-file 空の s-file を作成する。
-rSID s-file s-file を作成する際の初期の SID を指定する。
-tfile s-file file の内容を s-file に追加する。 その際,s-file には,追加されたテキストとしてのフラグを立てる。file が省略された場合は,そのようにして追加されたテキストは削除される。s-file とともに確実に配布したいドキュメントを指定する場合に有効である。
-y"comment" s-file delta コマンドの動作と同じ方法で,初期デルタにコメント・テキストを挿入する。-y オプションを使用しない場合,省略時のコメントとして,ファイルの作成日付と時刻,およびユーザ名を含んだ 1 行が挿入される。
-z s-file ファイルが破損した場合に,s-file のチェックサムを再計算する。

注意

val コマンドと admin -z コマンドを使用して,破損した s ファイルを修復することは危険です。 システム管理者または指定の SCCS ライブラリ管理者に依頼してください。

admin -f オプションと admin -d オプションのフラグは,表 6-7 で示されているとおりです。

表 6-7:  admin コマンドのフラグ

フラグ 説明
b edit コマンドに -b フラグを使用すると,分岐が作成される。
cSID SIDget -e コマンドが使用できる最も高位のデルタとして指定する。
dSID get コマンドまたは edit コマンドで省略時の SID を使用することを指定する。
fSID SIDget -e コマンドで使用できる最も低位のデルタとして指定する。
i 「no Id keywords」エラー・メッセージを,警告ではなく致命的エラーにする。
j 2 人以上による s-file の同時編集を可能にする。
lSID [,SID.. ] 指定の SID が編集用として取り出されないようにロックする。-fla フラグですべてのデルタをロックできる。-d フラグで指定のデルタのロックを解除できる。
mname get コマンドでキーワードが展開された場合,出現する %M% キーワードをすべて name で置換する。 省略時の名前は,s プレフィックスのない s-file 名。
n delta コマンドは,デルタが新しいリリースで作成された場合に,すべてのスキップされたリリースを空のデルタとして作成する。 たとえば,デルタ 5.1 をデルタ 2.7 の後に作成すると,リリース 3 と 4 は空になる。 その結果作られた空のデルタは,分岐デルタを作り上げる際の起点とすることができる。 このフラグを使用しない限り,省略されたリリースは s-file に現れない。
q"text" get コマンドでキーワードが展開された場合,出現するすべての %Q% キーワードを text に置換する。
ttype get コマンドでキーワードが展開された場合,出現するすべての %Y% キーワードを type に置換する。
v[program ] デルタは,デルタを作成する理由としての変更要求 (MR) 番号の入力を要求する。program 名は,MR 番号の妥当性チェック・プログラムの名前を指定する。 詳細は, delta(1) を参照。

たとえば,次のコマンドは,既存のテキスト・ファイルの内容を使用して,SID 2.1 で始まる s-file を作成します。 さらに,コメントを付けて識別できるようにしています。s-filei フラグが設定されています。 このコマンドでは,結果の s-file を,ユーザの作業ディレクトリの下の SCCS ライブラリに格納します。

% sccs admin -iunstamp -fi -r2 -y "Initial release" unstamp
 

この例では,元のファイルは破壊されません。

6.6.9    SCCS オプションの使用

sccs コマンドでは,表 6-8 に掲載したオプションがサポートされています。 これらのオプションには,表に例示されているような,SCCS 機能コマンドのキーワードが含まれている必要があります。 オプションと引数の間にはスペースを入れてはなりません。

表 6-8:  SCCS コマンド・オプション

オプション 説明
-ddirname

SCCS ライブラリの親として使用するディレクトリを指定する。 現在の作業ディレクトリが親でなくても,SCCS ライブラリにアクセスできる。 次に例を示す。

% pwd
/usr/users/gunther
% sccs -d/usr/src/dcb_tools get attr
1.8
126 lines

-ppath path を,指定したファイルのパス名の最終要素に付加する。 省略時,SCCS は SCCS を付加する。-d の例では,指定されたパスが /usr/src/dcb_tools/SCCS/s.attr になる。 SCCS ライブラリが SCCS という名前でない場合は,パスの構成要素を変更するために,-d オプションを使用する。
-r sccs UID に変更せずに,ユーザの実際の UID で実行する。 セキュリティ上,SCCS は,通常,SCCS ライブラリのファイルの所有権を,sccs UID に属するように設定する。 自分のライブラリを管理するためだけに SCCS を使用する場合に,このオプションは有効である。 つまり,-r オプションを使用すると,特別の許可がなくても SCCS ディレクトリを作成でき,SCCS は,ユーザの UID を使用してそのディレクトリ内のファイルを変更する。

6.6.10    独立した SCCS コマンドの一覧

表 6-9 に,独立した SCCS コマンドを簡単に説明します。 これらのコマンドのうちのいくつかは,sccs コマンドではサポートされていません。 詳細については,該当するコマンドのリファレンス・ページを参照してください。

表 6-9:  独立した SCCS コマンド

コマンド名 sccs コマンドによるサポート 説明
 
 
admin あり s-file の作成,または既存の s-file の特性の変更。
cdc なし デルタに関連するコメントを変更する。
comb なし s-file の 2 つ以上の連続したデルタを 1 つのデルタに統合する。 デルタを結合することによって,必要な記憶領域を減少できる。
delta あり 編集済みの g-file をライブラリにチェックインさせ,変更内容とヒストリを記録する。 p ファイルを削除する。
get あり s-file の指定されたバージョンを取り出す。 編集またはコンパイルを行うためにファイルのコピーを取得する場合には,このコマンドを実行する。 編集する場合は,get -e コマンドを実行する。 その場合は,編集用の s-file をチェックアウトし,g-file を再作成し,それを現在のディレクトリに置いて,p ファイルを作成する。
prs あり 指定の s-file のリビジョン・ヒストリを表示する。
rmdel あり 指定の s-file の指定された分岐から最新のデルタを削除する。
sccsdiff あり s-file の 2 つのバージョンを比較する。s-file 名を明示して指定する必要がある。
sccshelp なし 診断メッセージまたは SCCS コマンド名の説明を出力する。
unget なし p ファイルを削除して,展開された ID キーワードを持つコピーへ g-file を置き換え,前回 get -e コマンドを実行したときの影響を削除する。sccs unedit コマンドと同じ。
val なし s-file のチェックサムを計算して,その結果が,ファイルに保存されているチェックサムと一致するかどうかを確認する。sccs admin -z コマンドとこのコマンドを一緒に使用すると,破損したファイルを修復できる。
what あり ファイル内の SCCS ID パターンを探索して,それに続くテキストを表示する。 このコマンドを実行すると,(SCCS 制御の下に置かれている) プログラムを構成するソース・バージョンの識別情報を検出できる。

注意

val コマンドと admin -z コマンドを使用して,破損した s ファイルを修復することは危険です。 システム管理者または指定の SCCS ライブラリ管理者に依頼してください。

6.7    RCS コマンドと SCCS コマンドの機能比較

表 6-10 は,RCS および SCCS の動作の簡単な比較と,類似した機能を実行するコマンドです。 各コマンドの使用方法についての詳細は,リファレンス・ページを参照してください。

表 6-10:  機能比較: RCS と SCCS コマンド

タスク RCS コマンド SCCS コマンド
元になるファイルから新しいファイルを作成する。 ci file sccs create file sccs admin -isfile gfile admin -ipath/sfile gfile
展開されたキーワードを持つファイルのコピーを取り出す。 co -u file sccs get file get file
展開されていないキーワードを持つファイルのコピーを取り出す。   sccs get -k file get -k file
ファイルをチェックアウトする。 co -l file sccs edit file get -e file
編集済みのファイルをチェックインする。 ci file sccs delta file delta file
ファイルのリビジョン・ヒストリを表示する。 rlog file sccs prs file prs file
ファイル・リビジョン間の差異を確認する。 rcsdiff -rrev file sccs diffs -rrev file sccsdiff -rrev -rrev file
ファイル・リビジョンをマージする。 rcsmerge -rrevs file sccs edit -irevs file
確認情報を検索する。 ident sccs what what
管理用のタスクを実行する。 rcs admin
現在のディレクトリを整理する (変更されていないファイルを削除する)。 rcsclean sccs clean