cvs でバイナリ・ファイルを保管する際の問題点が二つあります。 一つ目は、cvs がファイルを取り出す際に、 リポジトリで標準的に使用する行末形式 (ラインフィードのみ) を、 クライアント側のオペレーティングシステムに適した形式に変換する事です (例えば Windows NT だと、キャリッジリターンの後にラインフィードとなり ます)。
二つ目の問題点は、キーワードと同じデータが 偶然バイナリ・ファイルに含まれる可能性がある事です (see Keyword substitution)。 そのためキーワード展開を無効にする必要があります。
幾つかの cvs コマンドで ‘-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 # For non-unix systems: # Copy in a good copy of the file from outside CVS $ cvs commit -m "make it binary" kotest
ファイル kotest を格納した時はファイルはバイナリ・ファイルとし
ては保存されません。というのは、バイナリ・ファイルとしては格納しなかっ
たからです。
‘cvs admin -kb’ コマンドでファイルの置換モードを設定しますが、
既にある作業コピーは変更してくれません。
行末を適切に処理する必要がある場合 (cvs のクライアントとして
unix 以外のシステムを使用している場合) は、
上記の例に示した cvs commit
コマンドのように、
新たにファイルのコピーを格納する必要があります。
Unix では、‘cvs update -A’ で十分です。
ここで、‘cvs admin -k’ を用いて置換モードを変更しても、 この置換モードはバージョン管理されないことを認識しておいて下さい。 これは例えば古いリリースにテキスト・ファイルがあり、 新しいリリースに同じ名前のバイナリ・ファイルがあった場合、 バージョンによってテキストとバイナリを区別して取り出す方法を、 cvs が備えていないことを意味しています。 この問題を解決する方法は今のところありません。
cvs add
や cvs import
を実行する際、
既定でバイナリとして扱うかどうかを、
ファイルの名前によって判断するように設定もできます。
例えば、ファイル名が ‘.exe’ で終わるファイルを
バイナリと判断するように設定できます。See Wrappers.
現時点では内容に応じてファイルがバイナリかどうかを調べる方法はありませ
ん。そのような機能を設計する主な困難は、バイナリとそうでないファイルの
区別をする方法が明らかでなく、適用する規則がオペレーティングシステムに
応じてかなり異なるであろうということです。