使用 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" 存储库时抛出错误:
- 在 Bitbucket 上创建一个 git 存储库
- 使用 git 命令在本地克隆,添加了一个 android 项目,提交,推送。工作正常。
- 运行 hg-git "convert" 命令在本地文件夹上。
- 我添加、提交、推送到 Bitbucket。
插件自动更改了项目结构,并在我的文件夹中生成了一个包含 .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 命令直接从该存储库中提取和推送到该存储库。
我有一个版本为 git 的项目,我们的客户希望使用 Mercurial 访问它,因此我们的想法是使用插件“hg-git”转换项目。
按照以下步骤使用 hg 命令克隆 "converted" 存储库时抛出错误:
- 在 Bitbucket 上创建一个 git 存储库
- 使用 git 命令在本地克隆,添加了一个 android 项目,提交,推送。工作正常。
- 运行 hg-git "convert" 命令在本地文件夹上。
- 我添加、提交、推送到 Bitbucket。
插件自动更改了项目结构,并在我的文件夹中生成了一个包含 .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 命令直接从该存储库中提取和推送到该存储库。