为什么Git在blob文件中存储(和哈希)blob大小?

4
Git的blob对象文件格式为blob <size string>\0<data>。计算blob标识SHA-1哈希值不仅来自blob内容,还包括头部增强的blob数据(如上所述)。
作为一个纯粹主义者,我不喜欢这种架构。它将数据的通用属性(其SHA1哈希值)与一些Git特定的头部混合在一起。
纯数据blob存储的另一个优点是,可以使用“写时复制”将文件添加到索引中,而不是复制整个文件。所需空间可以减半,并且某些操作可能会变得更快。
那么,为什么Git开发人员选择使用基于头部的格式而不是纯数据格式呢?
P.S. 据我所知,在Git的早期阶段,SHA-1哈希基于压缩数据。

2
我只能猜测“为什么”,但我怀疑这是为了让git读取对象的第一个块,进行解压缩,并查看需要为完整解压缩对象分配多少内存。 - torek
1个回答

3

据我所知,在Git的早期版本中,SHA-1哈希是基于压缩数据生成的。

是的,这导致了各种“优化”,例如提交65c2e0c,git 0.99,2015年6月

查找SHA1对象的大小,而不必膨胀所有内容。

但是,这种新格式可以追溯到“Git如何计算文件哈希值?”中所示的:

每次需要对数据本身进行任何操作时,都需要知道数据的长度。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接