7

Git 将单个对象存储在 SHA1 摘要的第一个字节所在的.git/objects/ab/cdefgh...位置。ab

但是,包文件不遵循相同的命名策略,我找不到关于它如何命名的文档。有什么见解吗?

4

2 回答 2

10

包文件保存objects/packgitrepository 布局中。在此目录中,它们存储为索引文件和包文件本身的对,例如:

pack-a862cfa8b080773290073999c800a2e655ef9b5d.idx
pack-a862cfa8b080773290073999c800a2e655ef9b5d.pack

这些文件名中的 SHA1sum 的计算方式在git-pack-objects文档中进行了解释(我的重点):

写入一对文件(.pack 和 .idx),使用 <base-name> 确定创建文件的名称。使用此选项时,这两个文件将写入 <base-name>-<SHA1>.<pack,idx> 文件中。<SHA1> 是已排序对象名称的哈希,用于根据包内容生成生成的文件名,并写入命令的标准输出。

对象名称是包文件中对象的 SHA1sum。

于 2011-03-29T09:07:51.910 回答
5

答案要么是“整个包文件的 SHA-1 哈希,减去最后 20 个字节”,要么是“最后 20 个字节的十六进制摘要”(两者是等价的)。

文件的最后 20 个字节是“预告片校验和”,它本身是整个文件的 SHA-1 哈希(减去最后 20 个字节)。

在 2013 年发生了变化(以前它是文件中所有哈希值的 SHA-1 总和)。请注意,文档现在只是读取“是基于包内容的哈希”。作者明确不保证如何计算 SHA-1(来自提交日志:“希望这会阻止读者依赖旧的或新的计算。”)。

于 2016-04-01T10:15:47.973 回答