Git 包文件名——摘要是什么?

发布于 2024-10-27 18:59:37 字数 148 浏览 2 评论 0原文

Git 将各个对象存储在 .git/objects/ab/cdefgh... 中,其中 ab 是 SHA1 摘要的第一个字节。

但是,包文件不遵循相同的命名策略,并且我找不到有关其命名方式的任何文档。有什么见解吗?

Git stores individual objects in .git/objects/ab/cdefgh... where ab is the first byte of the SHA1 digest.

However, pack files don't follow the same naming policy, and I can find no documentation on how it is named. Any insights?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

我也只是我 2024-11-03 18:59:37

包文件保存在 objects/pack 中,该文件记录在 git 存储库布局。在此目录中,它们以索引文件和包文件本身的形式存储,例如:

pack-a862cfa8b080773290073999c800a2e655ef9b5d.idx
pack-a862cfa8b080773290073999c800a2e655ef9b5d.pack

如何计算这些文件名中的 SHA1sum 在 git-pack-objects 文档(我的重点):

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


对象名称是包文件中对象的 SHA1 和。

The pack files are kept in objects/pack, which is documented in gitrepository layout. Within this directory, they are stored as pairs of an index file and the pack file itself, called, for example:

pack-a862cfa8b080773290073999c800a2e655ef9b5d.idx
pack-a862cfa8b080773290073999c800a2e655ef9b5d.pack

How the SHA1sum in those filenames is calculated is explained in the git-pack-objects documentation (my emphasis):

Write into a pair of files (.pack and .idx), using <base-name> to determine the name of the created file. When this option is used, the two files are written in <base-name>-<SHA1>.<pack,idx> files. <SHA1> is a hash of the sorted object names to make the resulting filename based on the pack content, and written to the standard output of the command.

The object names are the SHA1sums of the objects within the pack file.

黎夕旧梦 2024-11-03 18:59:37

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

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

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

The answer is either "the SHA-1 hash of the entire pack file, minus the last 20 bytes", or "a hexadecimal digest of the last 20 bytes" (both are equivalent).

The last 20 bytes of the file is the "trailer checksum" which itself is a SHA-1 hash of the entirety of the file (minus the last 20 bytes).

This was changed in 2013 (previously it was the SHA-1 sum of all the hashes in the file). Note that the documentation now simply reads " is a hash based on the pack content". The author explicitly does not guarantee how the SHA-1 is calculated (from the commit log: "Hopefully this will discourage readers from depending on the old or the new calculation.").

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文