J. Loeliger と M. McCullough による "Version Control with Git" を読んでいて、git の内部構造とパックされたファイルについて、それぞれ次の説明を見つけました。
「Git の内部データベースは、ファイルがあるリビジョンから次のリビジョンに移動するときに、すべてのファイルのすべてのバージョンを効率的に保存します。ファイルの違いではありません。Git はファイルの完全なコンテンツのハッシュをそのファイルの名前として使用するため、完全なコピーごとに操作する必要があります。ファイルのコンテンツの一部のみ、またはそのファイルの 2 つのリビジョン間の違いに基づいて、その作業またはオブジェクト ストア エントリを基にすることはできません。」
「パックされたファイルを作成するために、Git は最初にコンテンツが非常に類似しているファイルを見つけ、そのうちの 1 つの完全なコンテンツを保存します。次に、類似したファイル間の差分または差分を計算し、差分だけを保存します。」
Git はブロブのデルタ (デルタはブロブ自体) を格納するため、最初の段落が間違っているように思えます。では、なぜ著者はそのように説明することにしたのでしょうか? または、誰かがこれらの 2 つの段落の間のギャップを埋めることができますか? 完全なスナップショットがなくても、Git はパックされたファイルでうまくいくように思えます。ここに git-scm.comの例があります。