分散バージョン管理システムにバイナリファイルを格納した時のリポジトリ増加量

バイナリファイルを格納・修正した時の分散バージョン管理システム(DVCS)のリポジトリ増加量について調べてみました。

使ったDVCSのバージョンは次の通りです。すべてWindows 32bit版です。

  • Bazaar … TortoiseBazaar 0.6.6 (Bazaar 2.5.1)
  • Git … Git 1.7.11-preview20120710
  • Mercurial … TortoiseHG 2.7.1 (Mercurial 2.5.2)

これらのDVCSを使って以下の操作を実行しました。

  1. リポジトリの作成
  2. バイナリファイルの追加
  3. バイナリファイルの一部を修正してコミット
  4. バイナリファイルの一部を修正してコミット
  5. git gcをかける

バイナリファイルとしてExcelのドキュメント(.xls)を使用しています。ファイルの初期容量は7,806,976バイトです。

それぞれの操作をしたときのDVCSの管理ディレクトリの容量は次のようになりました。(単位は Bytes)

操作 Bazaar (.bzr) Git (.git) Mercurial (.hg)
1 リポジトリの作成 36,864 61,440 8,192
2 バイナリファイルの追加 7,151,616 7,217,152 7,143,424
3 バイナリファイルを修正 14,262,272 14,352,384 7,262,208
4 バイナリファイルを修正 21,375,488 21,490,176 7,378,766
5 git gc 21,375,488 7,297,536 7,378,766

この結果から、バイナリファイルの場合の動作は次のようになっていると推察されます。

  • Bazaar … 各コミットの差分を取らずに丸々格納します。
  • Git … 通常は各コミットの差分を取らずに丸々格納し、git gcを実行することで差分に変換します。参考: Git - パックファイル
  • Mercurial … 各コミットの差分を格納します。