一番一般的な意味で、Subversion はバイナリファイルを CVS よりももっと 適切に扱います。CVS は RCS を利用するので、変更されたバイナリファイルの 完全なコピーを、常に格納するしかありませんでした。しかし Subversion はバイナリ差分アルゴリズムを使ってファイル間の相違を 表現します。そのファイルがテキストなのかバイナリなのかによらず そうします。これはすべてのファイルがリポジトリ中に差分の形として( 圧縮されて)格納されるということを意味します。
CVS ユーザは、-kb
フラグを使ってバイナリファイルを
マークする必要がありましたが、それはデータが文字化けすることを
防ぐためです。(キーワード展開や行末変換によってこのようなことが
起こります)。このことはときどき忘れられてしまいます。
Subversion はもっと神経質な方法をとります—まず、キーワード展開や
行末変換は、明示的にそのような指示を出さなければ実行されません
(詳細はsvn:keywords
項 と
svn:eol-style
項 を見てください)。
デフォルトでは、Subversion はすべてのファイルデータを文字通り
単なるバイトの並びとして扱い、ファイルは常に、無変換の状態で
リポジトリに保存されます。
次に、Subversion はファイルが「テキスト」 であるか 「バイナリ」 であるかの内部的な記録を管理しますが、 この記録は、作業コピー中にしか ありません。 svn update実行中、Subversion は、ローカルに 修正のあったテキストファイルについて文脈マージをやりますが、 バイナリファイルに対してはそうしません。
文脈マージが可能かどうかを決めるのに、Subversion は
svn:mime-type
属性を調べます。もしファイルが
svn:mime-type
属性を持たないか、テキストを
示すような内容であれば(たとえば、text/*
)、Subversion はそれを
テキストであると判断します。それ以外の場合、ファイルはバイナリ
であるとみなされます。Subversion はsvn import
とsvn add 実行時に、バイナリ検出アルゴリズムを
実行することでユーザを助けます。これらのコマンドは、良い推測を
行い、(可能なら)バイナリのsvn:mime-type
属性
を追加されるファイルに設定します。(もし Subversion の推測が間違って
いた場合は、ユーザはいつでも手でその属性を削除することができます)