git 如何知道打包文件的 sha1 名称?

How does git know the sha1 name of the pack files?

假设情况: 我有一个 git 存储库,我有索引、HEAD、refs、packed-refs 等。 我不知道 .git/objects/pack

中的包文件名称

git 如何找出打包文件的名称?有没有办法从索引文件中计算出包文件的名称?

更新: .git/objects/info/packs 是我最接近我正在寻找的东西。但是这个文件并不总是存在。

作为一般规则,git 只读取 objects/pack 目录的内容:它事先不知道包文件的 SHA-1 值是什么。但是,当它开始制作 new 打包文件时,它会计算 SHA-1 并将其用作打包文件的名称;并且索引的名称必须与包文件的名称相同,所以 if

objects/pack/pack-1713881825f0238230418a7f843a8c9af9b70eea.pack

存在,那么

objects/pack/pack-1713881825f0238230418a7f843a8c9af9b70eea.idx

也应该存在,比如(这些名字是在目录中查找的,这些SHA-1没有什么特别的意义)。

可能还有 .keep.bitmap 文件对应于任何给定的 SHA-1(位图似乎是 git 2.0.0 中的新文件)。

更多关于打包文件的趣味知识,见

Documentation/technical/pack-heuristics.txt

在 git 来源中。 :-)