プログラミングユーティリティ

ソースのディレクトリを管理する

SCCS を使用している場合、実際のソースファイルは履歴ファイルであり、作業用のコピーではありません。

ソースディレクトリの複製

プロジェクトでの作業中に、テストまたはデバッグ用にソースの複製を作成したい場合は、自分の作業用ディレクトリに SCCS のサブディレクトリへのシンボリックリンクを作成できます。

$ cd /private/working/cmd.dir
$ ln -s /usr/src/cmd/SCCS SCCS

これにより、以下のコマンドを使用して、ソースファイルの作業用のコピーを複製して取り出すことができます。

 sccs get SCCS 

複製したディレクトリでの作業中にも、元のディレクトリでの場合と同様にファイルのチェックインまたはチェックアウトを行うことができます。

SCCS と make

多くの場合、SCCSmake(1s) とともに使用して、ソフトウェアプロジェクトを管理します。make を使用すると、ソースファイルの自動取り出しを行うことができます (他のバージョンの make では、自動取り出しを行うために特別な規則を使用します)。また、すべてのソースファイルの以前のバージョンを取り出し、make を使用してプロジェクトの以前のバージョンを再構築することもできます。

$ mkdir old.release ; cd old.release
$ ln -s ../SCCS SCCS
$ sccs get -c"87/10/01" SCCS
SCCS/s.Makefile: 
1.3 
47
.  .  .  
$ make
.  .  .  

構築処理中にはソースファイルをチェックインしないでください。プロジェクトの完成が近くなったら、すべてのファイルをチェックインして構築するようにしてください。これによって、公開される完成プロジェクトのソースが安定します。

ファイルの SID の整合性を保つ

複数のファイルで構成されるソース間で SID の整合性を保つことができます。SID の整合性を維持するには、すべてのファイルをまとめて sccs edit します。変更は、必要に応じて任意のファイルに行うことができます。そしてすべてのファイル (変更されていないものも含む) をチェックインしてください。edit および delta の実行時に引数として SCCS のサブディレクトリを指定すると、すべてのファイルを簡単にチェックアウトおよびチェックインすることができます。

$ sccs edit SCCS
.  .  .  
$ sccs delta SCCS

SCCS サブディレクトリを引数として delta サブコマンドを実行すると、コメントの入力を 1 回だけ要求されます。コメントは、チェックインされるすべてのファイルに適用されます。変更されたファイルを特定するには、各ファイルのバージョンログ (デルタテーブル) の "lines added, deleted, unchanged" のフィールドを比較します。

新しいリリースを作成する

プログラムの新しいリリースを作成するには、編集用のファイルをチェックアウトする際に、edit-rn オプションを使用します。n に作成するリリース番号を指定します。

$ sccs edit -r 2 program.c 

この場合は、新しいバージョンのデルタを使用するときに、そのデルタがリリース 2 での最初のデルタになり、SID が 2.1 となります。ディレクトリにあるすべての SCCS のファイルのリリース番号を変更するには、以下のコマンドを使用します。

$ sccs edit -r 2 SCCS

SCCS が使用する一時ファイル

SCCSs. ファイル (履歴ファイル) を更新する際には、x. ファイルという一時コピーに書き込みます。更新が終了すると、SCCSx. ファイルの内容を古い s. ファイルに上書きします。これにより、処理が異常終了した場合でも履歴ファイルは失われません。x. ファイルは、履歴ファイルと同一のディレクトリに作成され、履歴ファイルと同じアクセス権が与えられ、実効ユーザーによって所有されます。

SCCS ファイルが同時に更新されることを防止するために、履歴ファイルを更新するサブコマンドは、z. ファイルというロックファイルを作成します。z. ファイルには、更新を実行するプロセスの PID が含まれています。更新が終了すると、z. ファイルは削除されます。z. ファイルは、SCCS ファイルが含まれているディレクトリ中にモード 444 (読み取り専用) で作成され、実効ユーザーによって所有されます。