如何使Mercurial子存储库始终指向某个变更集或标记?

时间:2011-12-17 01:26:55

标签: mercurial mercurial-subrepos

我很好奇Mercurial是否可以做到这一点。我想在项目中有一个subrepos,它总是固定在手动指定的变更集上,或者更好 - 标记。

基本上我想要实现的是在主仓库中拥有一个核心系统,然后在子目录中拥有所有模块和组件,但我不希望这些子目录指向提示,只是指向那些主要版本的主要版本组件/模块(因此标签)。

1 个答案:

答案 0 :(得分:3)

子存储库的工作方式与您想要的完全相同。

Mercurial永远不会自动将subrepo更新为tip。它始终保持您选择的变更集。来自documentation

  

Subrepos 不会自动跟踪他们的最新变更集   来源即可。相反,它们会更新为对应的变更集   在顶级变更集中检出变更集。就是这样   开发人员总是会得到一组一致的兼容代码   图书馆更新时。

要实现您的目标,您可以按照以下步骤操作:

  1. echo subrepo = https://example.com/subrepo/repo/path > .hgsub
  2. hg add .hgsub
  3. hg clone https://example.com/subrepo/repo/path subrepo
  4. hg -R subrepo update mytag
  5. hg commit
  6. 这将创建一个subrepo目录,其中包含指定存储库的内容,只要您不将手动更新为其他内容,该目录将保留在mytag标记上!

    每个克隆您的存储库的人都会在与您相同的变更集上拥有子参数(即mytag)。

    仅供参考,更新子订单的变更集存储在主存储库根目录的.hgsubstate文件中。