使用 mercurial 拉取 git 回购失败并出现错误 "path contains illegal component .hg/00changelog.i"

pulling git repo with mercurial fails with error "path contains illegal component .hg/00changelog.i"

我有一个版本为 git 的项目,我们的客户希望使用 Mercurial 访问它,因此我们的想法是使用插件“hg-git”转换项目。

按照以下步骤使用 hg 命令克隆 "converted" 存储库时抛出错误:

插件自动更改了项目结构,并在我的文件夹中生成了一个包含 .hg 文件的新文件夹,如下所示:

  |-My_awesome_android_app
        |–.git
        |– My_awesome_android_app_hg
            |-.hg
        |– android_app_files_in_this_folder

当我尝试使用 Mercurial 命令从 Bitbucket 导入 "converted" git 项目时,它被中止了:

hg clone git@bitbucket.org:xxxxx/My_awesome_android_app.git
destination directory: My_awesome_android_app-git
importing git objects into hg
updating to branch default
abort: path 'fluffy-bitbucket-git-hg/.hg/00changelog.i' is inside nested repo 'fluffy-bitbucket-git-hg'

为了尝试解决 "nest" 问题,我在一些 SO post 上读到,.hg 文件夹必须与 .git 文件夹处于同一级别。结构更改为:

|-My_awesome_android_app
        |–.git
        |–.hg
        |– android_app_files_in_this_folder

我提交更改,推送到 Git 回购,然后再次尝试 hg pull:

hg clone git@bitbucket.org:xxxxx/My_awesome_android_app.git
destination directory: My_awesome_android_app-git
importing git objects into hg
updating to branch default
abort: path contains illegal component: .hg/00changelog.i

我已经找了将近 2 天来解决第二个错误,从 brew everything 重新安装,它失败了,然后又是 macport,检查了 python 和 mercurial,试图创建一个新的 bitbucket repo 并从从头开始,查看GG和SO其他相关posts,修改.hgrc文件,我仍然得到错误。

我尝试了另一种选择:Greg Malcolm 的 "Mirror git and mercurial repos the lazy way"(同一本地项目 mirrors/sync 一侧是 git 存储库,另一侧是 mercurial)。

这是我测试期间唯一可行的解​​决方案。但这并不是我想要做的,因为你有 2 个不同的回购协议要同步,我只想有一个包含 .git 和 .hg 的回购协议。

我希望有人可以帮助我解决使用单个 Git repo 接受 .git push 和 hg pull 的解决方案的错误消息,或者告诉我 "mirroring" 2 个不同的 repo(一个 git,一个 hg)是唯一的工作选项。

谢谢!

配置/安装:Mac Os Sierra 按照 SO answer 中所述安装其余部分 - macports - python 2.7 - 水银 - 汞git

.hgrc 文件的内容:

[ui]
username = xxxx xxxxxx <pxxxxx.xxxxxx@xxxx.xxx> (in reality it is my mail adress)
ssh = ssh -C
[extensions]
hgext.convert= 
hgext.bookmarks =
hggit =
[git]
intree = True

"convert" 命令不是 hg-git 的一部分,而是一个独立的扩展,不会创建与原始 Git 存储库兼容的存储库。

为了通过 hg-git 透明地将 Mercurial 用于远程托管的 git 存储库,只需直接从 Git URL 克隆存储库,例如:

hg clone git@bitbucket.org:user/repo

然后您应该能够使用普通的 Mercurial 命令直接从该存储库中提取和推送到该存储库。