有没有办法将Mercurial存储库用作Git子模块?

时间:2012-01-30 16:34:01

标签: git mercurial git-submodules

我很高兴使用子模块来跟踪我的项目所依赖的所有库。 问题是我正在使用一个名为core-plot的库,它只有一个公共的mercurial存储库。 我可以在一个只读的Git存储库中镜像它,但这是我得到的最佳选择吗? 我曾经看到Mercurial中有模块来跟踪Git中的内容。有人知道是否存在相反的方式?

2 个答案:

答案 0 :(得分:25)

使用git-hg

首先,确保主存储库下有一个(非Mercurial)git子模块。如果您还没有其他子模块,只需为core-plot以外的某个库创建一个虚拟子模块,例如:

main-repo $ git submodule add https://repo.url.com/repo.git repo

其次,将core-plot库克隆到某个目录中。

main-repo $ git-hg clone  https://code.google.com/p/core-plot/ core-plot

将新的repo添加到子模块列表中。

main-repo $ git submodule add ./core-plot core-plot
main-repo $ git commit -am "added core-plot submodule"

从现在开始,来自此repo的任何克隆都将拉出两个存储库。 (在子模块初始化和更新之后)。

到目前为止我发现的一些问题是:

  • 如果你推到裸机,那么repo链接和目录将在裸机中创建,但是存储库不会被克隆到其中,而其他人从裸机中拉出将无法获得核心情节lib
  • 如果需要更新核心图,则git-hg的核心图必须为git-hg pull

在StackOverflow上也会询问相反的问题git submodule from Hg repo?。最好的答案提到项目hg-git和git-hg。另一个相关的相反问题是How to deal with Git submodules on a repo that is converted to Mercurial

答案 1 :(得分:15)

根据我的经验,大多数活跃的非git项目都有一个最新的git镜像在GitHub上浮动。看起来core-plot也有一个:

https://github.com/djw/core-plot

如果您愿意依赖任何设置该镜像的人,看起来这可能是获得子模块的最简单方法。