Mercurial -> 保留提交哈希的 Git 迁移



是否有任何现有工具能够将mercurial存储库导出到git存储库,同时保留提交哈希?

我知道hg git或fast-export.git,但它们使用新的哈希创建新的提交(而且似乎没有任何配置选项(。我们在Bitbucket上托管了数百个mercurial存储库,其中包含大量挂钩、下载链接等,具体取决于哈希值。能够保存散列将为我们节省更新所有外部资源所需的大量精力。

这是不可能的。

Git对象的哈希ID是底层对象数据的加密校验和。在提交对象的情况下,它是字符串commit的加密校验和、空格、以十进制表示的其余数据的字节大小、ASCII NUL,然后是标头、日志消息文本和尾部。

Mercurial提交的哈希ID是该提交的Mercurial数据的适当部分的密码校验和(Mercurial的数据结构不同,因此一些提交数据不参与校验和(。

如今,从一些已知数据构建特定哈希ID的唯一已知方法——就像你在Git提交中所做的那样——是添加一个"垃圾"数据区,然后花很多CPU时间计算垃圾数据中不同内容的哈希。创建粉碎的团队使用了110 GPU多年的计算时间来找到一个重复的哈希ID。

最新更新