我想知道为什么 Mercurial 没有与 Launchpad/Bazaar 配合使用的 Mercurial 插件?是否存在技术限制,导致无法使用本地 Mercurial 存储/克隆来处理远程 Bazaar 存储库?
答案1
反向 (bzr-hg) 确实存在,但该插件已于 2012 年被废弃。请参阅https://launchpad.net/bzr-hg。我怀疑 hg-bzr 插件没有出现的原因与我们放弃 bzr-hg 插件的原因类似,此外 bzr 的流行度已经下降 - 因此插件的必要性较小。
bzr-hg 插件的一个问题是,Bazaar 和 Mercurial 都具有低级 API,这些 API 经常变化,因此插件会经常崩溃。
Bazaar 和 Mercurial 也具有相当不同的数据模型 - 差异比 Bazaar 和 Git 之间的差异更大 - 这使得以高效的方式转换修订版本变得困难。
Mercurial 和 Bazaar 有许多难以在它们之间映射的功能。
- Mercurial 清单和 Bazaar 清单中的信息无法轻松地来回转换 - 您需要查找表来获取文件识别信息
- Bazaar 修订属性与 Mercurial 附加属性类似,但它们不支持特殊字符(反之亦然)
- Mercurial 不支持“幽灵修订”,即被引用但不存在于存储库中的修订
- Mercurial 没有文件 ID 的概念,因此文件 ID 需要像特殊文件一样存储在存储库中的其他地方
- Mercurial 不支持空目录、多个提交作者或具有两个以上父级的修订(Git 术语中的“章鱼合并”)
与 Git 交互时,这些事情变得容易得多,因为它是内容可寻址的,而且更简单(例如,它没有每个文件的修订图)。Hg-Git 或 Bzr-Git 可以将 Git 中的所有内容导入 Mercurial,只要您最终以相同的表示形式将其转换回 Git,您就会获得与最初相同的提交 SHA。