8

我在 Mercurial 中使用 subrepos 设置项目时遇到问题。

目标:

我想像这样设置结构:

-- Build_Repo (this repo will be used to track dependencies)
  -- Subrepo_A (this is the main source)
    -- Modules (Part of Subrepo_A)
      -- Subrepo_B 

所以有三个存储库:Build、A 和 B。B 嵌套在 A 中,A 嵌套在根构建存储库中。build repo 将用于跟踪依赖项,subrepo A 将用于跟踪主要源文件,subrepo B(和其他)将用于跟踪模块/插件开发。

问题/问题

通过简单地将 Subrepo_A 路径和源添加到 .hgsub 文件并将其提交到构建仓库,我可以轻松设置初始构建仓库和嵌套的 Subrepo_A。但是,当我将 subrepo_B 路径/源添加到构建 repo 的 .hgsub 后,然后尝试提交时,我收到错误消息:

中止:路径“Subrepo_A/Modules/Sebrepo_B”在嵌套仓库“Subrepo_A”内

Mercurial 似乎不喜欢在已经嵌套的 repo 中的嵌套 repo。这是真的,还是我错过了什么?关于如何管理构建/依赖关系的任何更好的想法?

4

2 回答 2

1

这里的问题是 Mercurial 不可避免的限制之一:存储库对应于您计算机上的文件夹树。存储库负责该文件夹树下的所有内容。

当您的顶级存储库包含子存储库时,它会将其文件夹结构的该部分的完全控制权移交给子存储库。所以顶层不能在第一个子仓库文件夹中的某个地方指定另一个子仓库。

解决方案 1

Subrepo_B 实际上是 Subrepo_A 的一个依赖项。在这种情况下,通过编辑 Subrepo_A 的 .hgsub 文件以在 Modules/Sebrepo_B 下添加 Subrepo_B,使您的存储库反映真正的依赖关系。这是因为 Subrepo_A 保留了对其文件夹的控制权。

解决方案 2

Subrepo_A 不依赖于 Subrepo_B,你把它放在那里是为了方便。在这种情况下,您应该使 Subrepo_A 和 Subrepo_B 都成为 Build_Repo 的子存储库(在不同的位置)。

于 2012-07-04T07:48:20.593 回答
0

在您的情况下,您必须将 subrepoB 添加到 subrepoA。

我建议尝试移动依赖项,以便您的树只有 2 个级别,但这可能是不可能的。否则,它总是不是一个非常顺利的体验。

于 2011-09-13T03:43:03.960 回答