【问题标题】:Is there a way to use a Mercurial repository as Git submodule?有没有办法将 Mercurial 存储库用作 Git 子模块?
【发布时间】:2012-02-22 10:45:51
【问题描述】:

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

【问题讨论】:

  • 将整个签出的 mercurial 存储库置于 git 版本控制下可能是最简单的。这样,您可以随时通过 hg 更新库,并且仍然可以在项目的 git 源代码控制下对其进行更新。
  • 问题是你在克隆主存储库时下载它,而子模块是按需获取的。
  • 大声笑,然后你创建一个新的 git 存储库并将整个 mercurial 的东西放进去。这个 git 存储库可以用作常规 git 子模块.. 问题解决了
  • 镜像意味着什么,你也可以在你的 git 镜像中添加一个钩子,以便在回复之前从 hg 中获取,只是检查是否有人有任何不需要服务器镜像的解决方案。跨度>

标签: git mercurial git-submodules


【解决方案1】:

使用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 链接和目录将在裸机中创建,但存储库不会在其中克隆,并且从该裸机中提取的其他人将无法获取 core-plot 库.
  • 如果 core-plot 需要更新,git-hg 必须更新为 git-hg pull

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

【讨论】:

  • 我实际上知道这些项目。一个很酷的是将 git 用作 HG 项目的子模块,而另一个文档说不支持子模块。另一个线程讨论如何将 HG 存储库镜像到 GIT 存储库,以便您可以从镜像中子模块。
  • @dvicino,您正在使用 git 管理您的主要项目,对吧?并且您想包含core-plot 并将其视为子模块?但是core-plot 开发人员使用 Mercurial 管理它?在这种情况下,我相信您不需要在core-plot 存储库中执行git-hg submodule。你只在那里做git-hg fetch。您可以从主项目的存储库中执行git submodule。这就是我解释Pro-git 6.6 "Submodules" 的方式。还是我不理解你?
  • 听起来不错。因此,您的建议是在可访问的服务器(如 github)中创建一个裸存储库,并在具有 git 存储库的机器中创建 cron 进程,git-hg 从 core-plot 获取并推送到另一个。然后从我的主仓库中对它进行子模块。对吗?
  • 为什么需要非水银子模块?此外,当通过远程共享 git 存储库时,这似乎不起作用:除了原始存储库 具有 ./core-plot 子模块之外,没有其他人。
  • 这个答案还有效吗?当我尝试使用git submodule add ./core-plot core-plot 步骤将子模块添加到模块列表时。但是,每当我尝试此 git 尝试克隆子模块 repo 时,它都无法告诉我它不存在。我想 git-hg clone 负责克隆,而 git submodule add 不需要进行克隆我错了吗?
【解决方案2】:

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

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

如果您愿意依赖设置该镜像的人,那么安装子模块似乎是最简单的选择。

【讨论】:

  • 说真的,这是最好的答案,您只需点击 Google 中出现的第二个链接。
  • 此外,您可以使用githgmirror.com 自动创建此类镜像免责声明:我的公司运行Git-hg Mirror。
  • 多一个值得信赖的人。
猜你喜欢
  • 2017-10-30
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多