所以我在Pro Git的第3.1节中看到了以下段落:
“我们假设您有一个包含三个文件的目录,然后将它们全部暂存并提交。暂存文件计算每个文件的校验和(我们在”入门“中提到的SHA-1哈希),存储该版本的Git存储库中的文件(Git将它们称为blob),并将校验和添加到临时区域“
我的问题是:为什么git“在我提交这些文件之前”将文件的版本存储在Git存储库中?
答案 0 :(得分:2)
Why questions are always tricky.
有一个非常机械的答案(我看到siride mentioned in a comment):Git的索引的内部结构,Git用来构建 next 的神秘对象> commit,仅存储blob哈希ID。因此,为了在索引中创建文件的副本(以便它将在下一次提交中),它必须作为blob对象存储在存储库中。
有一个性能答案:通过在索引中存储哈希ID,Git可以非常快速地进行新的提交。
有一个数据恢复答案(有点弱):通过预先将blob存储在存储库中,如果你不小心做了一件坏事,可以通过git fsck --lost-found
将它恢复一段时间它。 (这里的缺点是,或者包括,如果blob匹配存储库中的现有blob,它不会显示在找不到的搜索中;并且您丢失了文件的名称,这通常是了解其内容很重要。)
有一个设计美学的答案:也许Linus认为git add file
早期将文件复制到存储库比以后git commit
更好。
您可以选择任何这些答案,也可以自己制作答案!