为什么Git在Blob文件中存储(和散列)blob大小?

时间:2015-12-22 22:16:21

标签: git hash architecture blob

Git的blob对象文件格式为blob <size string>\0<data>。 blob标识SHA-1哈希不仅仅来自blob内容,而是来自头部增强的blob数据(如上所述)。

作为纯粹主义者,我不喜欢那种架构。它将数据的通用属性(其SHA1哈希)与一些特定于git的头文件混合在一起。

纯数据blob存储的另一个优点是可以使用&#34; copy-on-write&#34;将文件添加到索引中。而不是复制整个文件。所需的空间可以减半,一些操作可能会变得更快。

那么,为什么Git开发人员选择使用基于头的格式而不是纯数据格式呢?

P.S。在Git早期的AFAIK SHA-1哈希基于压缩数据。

1 个答案:

答案 0 :(得分:1)

  

在Git早期的AFAIK SHA-1哈希基于压缩数据。

是的,这导致了所有类型的“优化”,例如commit 65c2e0c, git 0.99, June 2015

  

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

但是,“How does git compute file hashes?”中说明的新格式可以追溯到:

每次需要数据的长度来对数据本身做任何事情。