我一直在阅读 J. Loeliger 和 M. McCullough 的“使用 Git 进行版本控制”,我发现以下分别对 git 的内部结构和打包文件进行了解释:
“Git 的内部数据库有效地存储每个文件的每个版本 - 而不是它们的差异 - 因为文件从一个修订版到下一个修订版。因为 Git 使用文件完整内容的哈希作为该文件的名称,它必须对每个完整副本进行操作文件。它不能将其工作或其对象存储条目仅基于文件的部分内容,也不能基于该文件的两个修订版本之间的差异。
“为了创建一个打包文件,Git 首先找到内容非常相似的文件并存储其中一个的完整内容。然后它计算相似文件之间的差异或增量,并仅存储差异。”
现在它们对我来说似乎是矛盾的,第一段是错误的,因为 Git 确实存储了 blob 的增量(增量本身就是 blob)。那么为什么作者会决定这样解释呢?或者有人可以弥合这两段之间的差距吗?在我看来,Git 在没有完整快照的情况下可以很好地处理打包文件。我有一个来自 git-scm.com的例子。