我试图更新提交消息,但同时保持相同的哈希。
我尝试了两个选项--消息回调和提交回调--但是不管我选择哪一个,它都会产生新的哈希。我是怎么做到的:
python3 git-filter-repo.py --preserve-commit-hashes --message-callback (or --commit-callback) '
if b"blabla" not in message:
message = b"MyMessage " + message
return message' --force这是一种虫子吗?还是我做错了什么?
任何帮助都是非常感谢的。
发布于 2021-02-04 05:54:52
我试图更新提交消息,但同时保持相同的哈希。
这是不可能的哈希是提交的整个内容的密码校验和。更改消息中的单个比特对校验和的影响与更改时间戳中的单个比特相同:新提交获得一个新的唯一散列ID。其他Git命令(在任何计算机上)都是这样识别这与原始提交不同的提交的。如果哈希没有改变,您将无法存储更新的提交,也无法将其发送到任何其他Git。
这是Git存储模型核心的一个基本概念:哈希ID是对象。针孔原理是该死的,每个比特流都必须有自己唯一的散列ID。如果你可以中断哈希函数,你可以破坏--或至少阻碍--存储库中的进度。。
( --preserve-commit-hashes选项使内置的默认消息重写选项不查找类似提交散列in的模式,在filter生成的转换表中查找它们,并使用结果。这与您想要的存储库截然相反,存储库中广泛使用了git cherry-pick -x,每个选中的提交都会说它是以前提交H的一个樱桃选择,用于一些散列。filter-repo程序试图确保先处理先前的提交,然后在随后的提交中替换过时的散列ID。我不知道这在实践中有多好:目标是显而易见的,但细节却变得相当棘手。我不完全确定为什么会存在这个选项,但是如果您正在重写历史记录,并且某些类似提交散列但实际上不是提交散列的东西正在被破坏,这可能就是您使用此选项的原因。)
https://stackoverflow.com/questions/66030537
复制相似问题