たとえば、20GBのディレクトリが20.1GBのディスク容量の空きがあるコンピュータに保存されていて、このディレクトリをリビジョン管理下に置きたい場合を考えてみます。サーバーは改訂履歴を保存するために利用できます。
Subversionでは、サーバーから空のディレクトリをチェックアウトし、ファイルを追加してコミットします。これにより、作業ディレクトリとほぼ同じサイズの.svnディレクトリが作成されるため、変更を検出して差分を作成できます。.svnディレクトリのサイズは、定期的に変更しても時間の経過とともに変化しません。
ただし、これをgit(gitinit。;gitadd。;git commit)で試すには、完全な履歴をローカルに保存する必要があります。定期的な変更が行われると(十分に圧縮されない大きなバイナリファイルを想定)、.gitディレクトリはディスクに収まらなくなるまで大きくなります。
完全な履歴をローカルに保存しないようにgitを操作する方法はありますか?作業中のブランチの先端に関するデータのみを保持し、履歴リビジョンまたは他のブランチに関する情報が必要になるたびにリモートサーバーにクエリを実行するようにしますか?
注:.gitディレクトリの方が圧縮率が高く、.svnディレクトリよりも大きくなる前に多くの修正を加えることができます。問題は、時間の経過とともに大きくなるのに対し、.svnは大きくならないことです。