Git将单个对象存储在.git/objects/ab/cdefgh...
中,其中ab
是SHA1摘要的第一个字节。
但是,打包文件不遵循相同的命名策略,我找不到有关如何命名的文档。任何见解?
答案 0 :(得分:8)
包文件保存在objects/pack
中,gitrepository layout中记录了该文件。在此目录中,它们存储为索引文件和包文件本身的对,例如:
pack-a862cfa8b080773290073999c800a2e655ef9b5d.idx
pack-a862cfa8b080773290073999c800a2e655ef9b5d.pack
git-pack-objects文档(我的重点)解释了如何计算这些文件名中的SHA1sum:
使用< base-name>写入一对文件(.pack和.idx)确定创建的文件的名称。使用此选项时,这两个文件写在< base-name> - < SHA1>。< pack,idx>文件。的< SHA1>是已排序对象名称的哈希值,用于根据包内容生成文件名,并写入命令的标准输出。
object names是包文件中对象的SHA1sums。
答案 1 :(得分:2)
答案是"整个包文件的SHA-1哈希,减去最后20个字节"或"最后20个字节的十六进制摘要" (两者都相同)。
last 20 bytes of the file是"预告片校验和"它本身是SHA-1 hash of the entirety of the file(减去最后20个字节)。
这是changed in 2013(之前它是文件中所有哈希值的SHA-1总和)。请注意,documentation现在只是读取"是基于包内容的散列"。作者明确不保证如何计算SHA-1(来自commit log:"希望这会阻止读者依赖旧的或新的计算。")。