CVS でバイナリ・ファイルを保管する際の問題点が二つあります。 一つ目は、CVS がファイルを取り出す際に、 リポジトリで標準的に使用する行末形式 (ラインフィードのみ) を、 クライアント側のオペレーティングシステムに適した形式に変換する事です (例えば Windows NT だと、ラインフィードにキャリッジリターンが付加されます)。
二つ目の問題点は、キーワードと同じデータが 偶然バイナリ・ファイルに含まれる可能性がある事です (「16 キーワード置換」参照)。 そのためキーワード展開を無効にする必要があります。
幾つかの CVS コマンドで `-kb' オプションを用いれば、 確実に行末変換とキーワード展開を止めることができます。 古いバージョンの RCS だとこのオプションは使えませんが、 UNIX のようにラインフィードのみを行末に用いる オペレーティングシステムを使用しているならば、 代りに `-ko' が使えます。 他のオペレーティングシステムならば、 RCS を新しいバージョンに入れ替えて下さい。 5.7 以降であれば `-kb' が使えます。
`-kb' フラグを用いて新しいファイルを登録する方法を、 以下に例示します:
$ echo '$Id$' > kotest $ cvs add -kb -m"A test file" kotest $ cvs ci -m"First checkin; contains a keyword" kotest
ふと油断して `-kb' 無しでファイルを加えてしまった場合、
cvs admin
コマンドを使用して正常な状態に戻す必要があります。
以下に例示します:
$ echo '$Id$' > kotest $ cvs add -m"A test file" kotest $ cvs ci -m"First checkin; contains a keyword" kotest $ cvs admin -kb kotest $ cvs update -A kotest $ cvs commit -m "make it binary" kotest # UNIX 以外のシステムの場合
ファイル `kotest' を格納した時にキーワードが展開されます
(上記例の全てのコマンドの後で `cat kotest' を実行してみて下さい)。
`cvs admin -kb' コマンドでファイルの置換モードを設定しますが、
既にある作業コピーは変更してくれません。
キーワードを展開してないバージョンの `kotest' を取り出すには、
`cvs update -A' を使うのが最も簡単です。
行末を適切に処理する必要がある場合 (CVS のクライアントとして
UNIX 以外のシステムを使用している場合) は、
上記の例に示した cvs commit
コマンドのように、
新たにファイルのコピーを格納する必要があります。
ここで、`cvs admin -k' を用いて置換モードを変更しても、 この置換モードはバージョン管理されないことを認識しておいて下さい。 これは例えば古いリリースにテキスト・ファイルがあり、 新しいリリースに同じ名前のバイナリ・ファイルがあった場合、 バージョンによってテキストとバイナリを区別して取り出す方法を、 CVS が備えていないことを意味しています。 この問題を解決する方法は今のところありません。
cvs add
や cvs import
を実行する際、
バイナリとして扱うかどうかを、
ファイルの名前によって判断するように設定できます。
例えば、ファイル名が `.exe' で終わるファイルを
バイナリと判断するように設定できます。「B.2 管理用ファイル cvswrappers」参照。