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哈希基于压缩数据。
答案 0 :(得分:1)
在Git早期的AFAIK SHA-1哈希基于压缩数据。
是的,这导致了所有类型的“优化”,例如commit 65c2e0c, git 0.99, June 2015:
查找SHA1对象的大小而不会膨胀所有内容。
但是,“How does git compute file hashes?”中说明的新格式可以追溯到:
git diff
,commit 051308f (git 1.4.0-rc1, May 2006) git fast-import
,从commit db5e523 (git 1.5.0, Aug. 2006) 每次需要数据的长度来对数据本身做任何事情。