git什么时候真正验证提交链的完整性?

Jef*_* S. 5 git hash commit integrity

我已经多次阅读关于基于 SHA-1 哈希和父提交链接的 git 完整性机制,这确保不会对 git 存储库中提交的数据进行任何更改。

我的问题是:在哪些操作中 git 检查散列是否有效,即匹配提交的内容?在推或拉期间执行检查吗?不幸的是,我没有找到任何关于此的信息。

tor*_*rek 4

Obsidian 的评论很准确:每个 Git 对象的名称该对象内容的哈希 ID,因此任何使用该 ID 来查找和读取内容的东西都可以而且通常确实会验证提取的数据的哈希值与用作提取该数据的密钥的 ID 相匹配。

\n\n

额外检查\xe2\x80\x94验证标记或提交\xe2\x80\x94中的GPG签名仅在您明确请求时进行。您可以请求git log默认检查此类签名,使用log.showSignature

\n\n

请注意Merkle 树中任何节点的完整性取决于您是否信任先前的节点免受第二原像攻击。如果您使用 GPG 签名的标签,这些标签中的签名会保护每个标签的数据(无论您信任 GPG 本身的程度如何),然后标签会保护其提交对象(无论您信任 SHA-1 的程度如何)。提交对象反过来保护其树,树保护其子树和 blob,而 blob 哈希则保护其内容。因此,如果您担心第二原像攻击,则应该进行不同类型的分析。如果您只关心随机数据损坏(如在旋转介质和/或非 ECC 内存上看到的那样),您可以像 Git 那样直接使用 SHA-1 哈希。

\n