小さなファイルと大きなファイルの違いが原因で、Subversion リポジトリが大きくなってしまう理由がわかりません。
いくつかのテストで使用されるデータベースのコンテンツの zip ファイルがあります。テスト データの新しいバージョンをそれぞれ Subversion リポジトリに保存したいと考えています。
私はいくつかの実験を行い、data.zip の最近のいくつかのバージョンをチェックインして、リポジトリのサイズがどうなるかを調べました。圧縮されていないデータは約 150MB で、圧縮されて圧縮されたものは約 50MB です。リポジトリにチェックインされた data.zip ファイルの新しいバージョンごとに、リポジトリのサイズが約 50MB 増加します。私はそれがはるかに少ないと予想されるデルタの量だけ増加するべきだと思います.
Subversion は xdelta を使用して、圧縮された差分データを格納します。SVN がより適切に機能することを確認するための私の試みは、xdelta をダウンロードして、2 つのバージョンに大きな違いがないことを確認することでした。それはそう
xdelta3.0z.x86-64.exe -e -s v1_path\data.zip v2_path\data.zip v1v2_delta.file
約 3MB の v1v2_delta.file を作成しました。
[myrepo]\db\revs の SVN リポジトリを調べたところ、新しいリビジョンごとに大きなファイルが表示されます。
02/08/2011 11:12 57,853,082 4189
02/08/2011 11:40 51,713,289 4190
02/08/2011 11:46 52,286,060 4191
(4189、4190、4191 はファイル名です。)
圧縮せずにdata.zipを圧縮してみました。これは、SVN が保存するものに違いはありませんでした。一見すると、最初のリビジョンだけでなく、すべてのリビジョンに対して data.zip 全体の圧縮コピーを保存していると思います。FSFS バックエンドで SVN 1.6 を実行しています。
バイナリのコミットと、 SVNがどのようにデルタを格納するかについて、他にもさまざまなスタックオーバーフローの優れた回答があります。しかし、これらから、上記のケースでデルタが保存されていない理由がわかりません。xdelta がスタンドアロンで実行されているような小さな差分を取得できる場合、SVN も確実に取得できます-またはそうしないことを選択していますか?!
編集: tar(非圧縮)ファイルも試しましたが、SVNはそれらを効率的に保存していません。また、SVNが diffs を保存したばかりの別のリポジトリに、同じデータ形式 (ただし、はるかに小さい) の zip ファイルがあることもわかりました。
したがって、この質問の要約版は次のとおりです。SVN はバイナリ ファイルを効率的に格納できます。たとえば、わずかに異なる 10 個の CAD ファイルは、 1 のサイズのちょうど 1.2 倍です。SVN は、圧縮された zip ファイルを使用してスペース効率を高めることさえできます。しかし、明らかに、バイナリ ファイルでは常にスペース効率が良いとは限りません。