我正在尝试编写一个 git 历史记录重写器,我已经完成了 Pack 文件读取器和写入器(还有 IDX 文件)。现在我更改了提交内容并重新计算了新对象的哈希值,我应该用其他对象中的新哈希值替换旧哈希值
在...的帮助下git 文档我知道如何重新计算提交、blob、tree 和 tag 对象类型的哈希值,但我想重新计算 ref_delta 或 ofs_delta 哈希值
如何计算 ref_delta 或 ofs_delta 哈希值?
我没有找到任何关于 ref_delta 或 ofs_delta 哈希计算的文档
答案1
REF_DELTA
和类型OFS_DELTA
不是真正的对象类型。
当 Git 将对象存储在包文件中时,它可能会针对另一个对象创建增量,以避免在这两个对象非常相似时需要存储整个对象。包文件中的这两种类型的条目是一种记录针对另一个对象的增量的方式。它们本身并不是独立的对象,您需要解析针对基础的增量才能获得完整对象,然后您可以重写并进行哈希处理。
您可能有兴趣阅读Documentation/technical/pack-format.txt
Git 存储库,它定义了这些内容。