AliReza Beigy Asked: 2021-01-18 05:04:44 +0800 CST2021-01-18 05:04:44 +0800 CST 2021-01-18 05:04:44 +0800 CST Git History 对象哈希重新计算 772 我正在尝试编写一个 git 历史重写器,我已经完成了打包文件读取器和写入器(也是 IDX 文件)。现在我更改提交内容并重新计算新对象的哈希值,我应该用其他对象中的新哈希值替换旧哈希值 在git 文档的帮助下,我知道如何重新计算提交、blob、树和标记对象类型的哈希,但我想重新计算 ref_delta 或 ofs_delta 哈希 如何计算 ref_delta 或 ofs_delta 哈希? 我没有找到任何关于 ref_delta 或 ofs_delta 哈希计算的文档 git hashing 1 个回答 Voted Best Answer bk2204 2021-02-01T08:56:08+08:002021-02-01T08:56:08+08:00 REF_DELTA和OFS_DELTA类型不是真正的对象类型。 当 Git 将一个对象存储在一个包文件中时,它可能会针对另一个对象创建一个增量,以避免在这些对象非常相似时需要存储整个对象。包文件中的这两种类型的条目是记录另一个对象存在增量的一种方式。它们本身不是独立的对象,您需要根据基础解析增量以获得完整的对象,然后您可以对其进行重写和散列。 您可能有兴趣阅读Documentation/technical/pack-format.txt定义这些内容的 Git 存储库。
REF_DELTA
和OFS_DELTA
类型不是真正的对象类型。当 Git 将一个对象存储在一个包文件中时,它可能会针对另一个对象创建一个增量,以避免在这些对象非常相似时需要存储整个对象。包文件中的这两种类型的条目是记录另一个对象存在增量的一种方式。它们本身不是独立的对象,您需要根据基础解析增量以获得完整的对象,然后您可以对其进行重写和散列。
您可能有兴趣阅读
Documentation/technical/pack-format.txt
定义这些内容的 Git 存储库。