Subversion book を読んだところ、Subversion は個々のファイルを保存するのではなく、ディスク容量を最小限に抑えるためにデルタのみを保存することが明らかでした。Subversion はバイナリ ファイルでも同じことを行います (これは以前は CVS の大きな弱点でした)。
しかし、私は正確なメカニズムを理解していません。ファイルをコミットするとどうなりますか?
- Subversion は差分のみを保存します (そして既に古いバージョンを持っています)
- Subversion は以前のバージョンを削除し、新しいファイルをそのまま保存し、必要に応じて古いバージョンを「再作成」するために逆差分を作成します。
- 私が考えていなかった他の何か。
最初のケースが最も論理的に見えるかもしれません。しかし、これは別の問題を提起します。Subversion リポジトリに 1000 件のコミットを含むファイルがあり、新しい開発者がクリーン コピーをチェックアウトした場合、Subversion は元のバージョンを取得し (初期インポート)、結果を返す前に 1000 の差分を適用する必要があります。これは正しいです?最新バージョンも保持されるファイルのキャッシュのようなものはありますか?
基本的に、svn リポジトリの内部に関する情報はどこで見つけることができますか?
更新:どうやら、Subversion のバックエンドがこれに大きな役割を果たしているようです。現在または執筆中、FSFS はオプション 1 を使用し、BDB はオプション 2 を使用します。ありがとう msemack!