为什么Git使用* compressed *对象的SHA1而不是原始对象的SHA1?

时间:2011-11-26 03:56:44

标签: git hash compression blob sha1

我只是好奇为什么做出这个选择 - 它基本上排除了改变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哈希始终是压缩对象的哈希值,而不是原始哈希值。“

1 个答案:

答案 0 :(得分:14)

就像你说的那样,当Git启动时,它就是原始的自述文件。从那时起,它已被更改,以便在压缩之前计算SHA1。

  

值得注意的是用于命名对象的SHA-1哈希值   是原始数据加上此标题的哈希,所以'sha1sum'文件   与文件的对象名称不匹配。 (历史记录:在黎明   在git时代,哈希是压缩对象的SHA-1。

http://schacon.github.com/git/user-manual.html#object-details