26.3 CVSの概要

CVSは、個々のファイルが頻繁に編集され、ASCIIeキストやプログラムソーステキストのようなファイル形式で保存される場合の同期に適しています。CVSを使用して他の形式、たとえばJPEGファイルのデータを同期させることは可能ですが、データ量が膨大になるとともに、生成される数多くのファイルをCVSサーバに恒久的に保存する必要があります。このような場合、CVSの機能のほとんどが利用できません。CVSを使用したファイルの同期は、すべてのワークステーションが同じサーバにアクセスできる場合のみ可能です。

26.3.1 CVSサーバの設定

サーバとは、すべてのファイルの最新バージョンを含め、有効なファイルが配置されるホストです。固定のワークステーションであれば、どれでもサーバとして使用できます。可能であれば、CVSレポジトリのデータを定期バックアップに含めます。

CVSサーバを設定するとき、できればユーザアクセスをSSH経由で許可します。ユーザがサーバにtuxとして認識され、CVSソフトウェアがサーバとクライアントにインストールされている場合、次の環境変数をクライアント側に設定する必要があります。




CVS_RSH=ssh CVSROOT=tux@server:/serverdir

コマンドcvsinitを使用して、クライアント側からCVSサーバを初期化します。これは一度だけ実行すれば、後は必要ありません。

最後に、同期に名前を付ける必要があります。クライアント上で、CVSで管理するファイル専用のディレクトリ(空のディレクトリ)を選択するか作成します。ディレクトリには、同期用の名前を付けます。この例で、ディレクトリ名はsynchomeです。このディレクトリに移動し、次のコマンドを入力して、同期名をsynchomeと設定します。




cvs import synchome tux wilber

CVSの多くはコメントが必要です。このため、CVSはエディタを起動します(環境変数$EDITORで定義されたエディタか、エディタが定義されていない場合はvi)。事前に次の例のようなコマンドラインにコメントを入力しておけば、エディタ呼び出しが避けられます。




cvs import -m 'this is a test' synchome tux wilber

26.3.2 CVSの使用

これで、すべてのホストがcvsco synchomeを使用して同期リポジトリからチェックアウトできます。これにより、クライアントに新しいサブディレクトリsynchomeが作成されます。変更内容をサーバにコミットするには、ディレクトリsynchome(またはそのサブディレクトリ)に移動し、「cvs commit」と入力します。

デフォルトでは、すべてのファイル(サブディレクトリを含め)がサーバにコミットされます。個別のファイルまたはディレクトリだけをコミットするには、cvscommit file1 directory1のように指定します。新しいファイルとディレクトリは、サーバにコミットする前に、cvsadd file1 directory1のようなコマンドを使用してレポジトリに追加する必要があります。この後、cvscommit file1 directory1を実行して、新しく追加したファイルとディレクトリをコミットします。

他のワークステーションに移動する場合、同じワークステーションの以前のセッションで同期リポジトリからチェックアウトしていない場合は、ここでチェックアウトします。

サーバとの同期は、cvs updateを使用して起動します。cvs update file1 directory1を使用すると、ファイルやディレクトリを個別に更新できます。現行のファイルとサーバに格納されているバージョンとの違いを確認するには、コマンドcvs diffまたはcvs diff file1 directory1を使用します。更新によって変更されたファイルを確認する場合は、cvs -nq updateを使用します。

更新時に表示されるステータス記号の例を次に示します。

U

ローカルバージョンが更新されました。この更新はサーバが提供しているすべてのファイル、およびローカルにシステムに存在しないすべてのファイルに影響します。

M

ローカルバージョンが変更されました。サーバ上で変更があれば、その差分がローカルコピーに取り込まれていることがあります。

P

ローカルバージョンに対し、サーバ上のバージョンからパッチが適用されました。

C

ローカルファイルが、レポジトリの現在のバージョンと競合しています。

?

このファイルがCVSに存在しません。

ステータスMは、ローカルで変更されたファイルを示します。ローカルコピーをサーバにコミットするか、ローカルファイルを削除して更新を再実行します。この場合、不足しているファイルは、サーバから取得されます。ローカルに変更したファイルをコミットしたが、そのファイルで同じ行に変更があり以前にコミットされている場合は、競合がCで示されて表示されることがあります。

この場合、ファイル内の競合マーク(>>および<<)を確認し、2つのバージョンのどちらを採用するか決定します。これは厄介な作業のため、変更を破棄し、ローカルファイルを削除して「cvs up」と入力し、現在のバージョンをサーバから取得することもできます。