jds*_*jds 11 compression git hash sha1 blob
我只是好奇为什么做出这个选择 - 它基本上排除了改变Git使用的压缩算法 - 因为它不使用原始blob的SHA1.也许这里有一些效率考虑.也许ZLIB在压缩文件方面比SHA1算法在创建散列时更快,因此在散列之前压缩更快?
以下是Linus原始Git README的链接:http://git.kernel.org/?p = git/git.git; a = blob; f = README; h = 27577f76849c09d3405397244eb3d8ae1d11b0f3; hb = e83c5163316f89bfbde7d9ab23ca2e25604af290
以下是相关段落:
"内容可寻址集合数据库中有几种对象.它们全部用zlib放气,从它们的类型标签开始,以及有关数据的大小信息.SHA1散列始终是压缩的散列对象,而不是原始对象."
man*_*lds 14
就像你说的那样,当Git启动时,它就是原始的自述文件.从那时起,它已被更改,以便在压缩之前计算SHA1.
值得注意的是,用于命名对象的SHA-1哈希是原始数据加上此标头的哈希值,因此"sha1sum"文件与文件的对象名称不匹配.(历史记录:在git时代的黎明,哈希是压缩对象的SHA-1.)
http://schacon.github.com/git/user-manual.html#object-details