使用するプログラムを決定する際に重要な要因がいくつかあります。
一般に、データの配信には2種類のモデルが使用されます。1つは、すべてのクライアントが、そのファイルを一元的なサーバによって同期させるモデルです。サーバはすべてのクライアントから、少なくともいずれかの時点でアクセスできる必要があります。このモデルは、CVSが使用します。.
もう1つは、すべてのネットワークホストがそれぞれのデータをピアとして相互に同期させるモデルです。rsyncは、実際にクライアントモードで動作しますが、任意のクライアントがサーバとして動作できます。
CVS、およびrsyncは、各種のUNIXおよびWindowsシステムなど、他の多くのオペレーティングシステムでも使用できます。
CVSでは、ユーザが手動によってデータの同期を開始します。これにより、データの同期を詳細に制御でき、競合の処理も容易です。ただし、同期の間隔が長すぎると、競合が起こりやすくなります。
複数のユーザが大きなプログラミングプロジェクトにかかわっている場合も、CVSでは、競合はまれにしか発生しません。これはドキュメントが個別の行単位でマージされるためです。競合が起こると、影響を受けるのは1台のクライアントだけです。CVSでは、通常、競合が容易に解決できます。
rsyncには、競合処理の機能はありません。ユーザは、意図せずにファイルを上書きしないように注意し、考えられる競合はすべて手動で解決する必要があります。安全のために、RCSなどのバージョニングシステムを追加採用できます。
CVSでは、新しいディレクトリやファイルは、コマンドcvs addを使って明示的に追加する必要があります。これにより、同期の対象となるファイルについて、ユーザがより詳細に制御できます。しかし他方で、新しいファイルが見過ごされることが多く、特にcvs updateの出力に表示される疑問符は、ファイルの数が多いためにたびたび無視されます。
CVSは追加機能として、古いバージョンのファイルが再構成できます。変更を行うたびに簡単な編集コメントを挿入しておくと、内容とコメントからファイルの作成状況を後で簡単に追跡できます。これは論文やプログラムテキストを作成する際、貴重な支援となります。
同期の対象となるすべてのホストには、分散されたデータを処理できるだけの十分なハードディスクの空き容量が必要です。CVSでは、サーバ上のリポジトリデータベースに余分な容量が必要となります。ファイルの履歴もサーバに保存されるため、このための容量も別に必要です。テキスト形式のファイルが変更されたときには、変更された行だけを保存すれば足ります。バイナリファイルは、ファイルが変更されるたびに、ファイルのサイズと同じだけの容量が必要なため、テキストより必要な容量が多くなります。
CVSを使い慣れたユーザは、通常、コマンドラインでプログラムを制御します。しかし、cervisiaのようなLinux用のグラフィカルユーザインタフェースがあり、また他のオペレーティングシステム用にwincvsなども用意されています。kdevelopなどの開発ツールやEmacsなどのテキストエディタの多くが、CVSをサポートしています。競合の解決は、これらのフロントエンドの方が、はるかに容易です。
rsyncは、より使いやすく初心者向けです。CVSは、より操作が難しくなっています。ユーザはレポジトリとローカルデータの間のインタラクションを理解する必要があります。データを変更すると、最初にローカルでリポジトリとマージする必要があります。これはコマンドcvsまたはupdateで実行します。次にコマンドcvsまたはcommitでデータをリポジトリに送信する必要があります。この手順をいったん理解すれば、初心者の方でもCVSを簡単に利用できるようになります。
伝送中、データは妨害や改ざんから保護される必要があります。CVSやrsyncはいずれもssh(セキュアシェル)経由で容易に使用できるため、この種の攻撃からセキュリティ保護されます。CVSをrsh(リモートシェル)経由で実行するのは避けるべきです。また、安全でないネットワークでpserverメカニズムを使用してCVSにアクセスすることもお勧めできません。
CVSは、プログラミングプロジェクト管理のため長期間にわたって開発者に使用されてきたため、きわめて安定しています。CVSでは開発履歴が保存されるため、誤ってファイルを削除するといったユーザの誤操作にも対応できます。
表 26-1 ファイル同期化ツールの機能: -- = とても悪い、- = 悪い、または利用不可、o = 普通、+ = 良好、++ = とても良好、x = 利用可能
|
CVS |
rsync |
|
|---|---|---|
|
クライアント/サーバ |
C-S |
C-S |
|
移植性 |
Lin、Un*x、Win |
Lin、Un*x、Win |
|
対話処理 |
x |
x |
|
Speed |
o |
+ |
|
競合 |
++ |
o |
|
ファイル選択 |
Sel./file, dir. |
ディレクトリ |
|
履歴 |
x |
- |
|
ハードディスクスペース |
-- |
o |
|
GUI |
o |
- |
|
難度 |
o |
+ |
|
攻撃 |
+ (ssh) |
+(ssh) |
|
データ損失 |
++ |
+ |