5

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

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

4

1 回答 1

10

这是不可能的。

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

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

今天唯一已知的从一些已知数据构建特定哈希 ID 的方法(就像您在 Git 提交中所做的那样)是添加一个“垃圾”数据区域,然后花费许多 CPU 年计算垃圾中具有不同内容的哈希-数据。创建shattered的团队使用了 110 个 GPU 年的计算时间来找到一个重复的哈希 ID。

于 2019-10-28T18:21:57.297 回答