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

Ale*_* N. 8 mercurial mercurial-subrepos

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

基本上我想要实现的是在主repo中有一个核心系统,然后是subrepos中的所有模块和组件,但我不希望那些subrepos指向tip,只是指向那些组件/模块的主要版本(因此标签).

krt*_*tek 3

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

Mercurial 永远不会自动将子存储库更新到提示。它始终保留在您选择的变更集上。从文档中:

子存储库不会自动跟踪其源的最新变更集。相反,它们会更新为与顶级变更集中签出的变更集相对应的变更集。这样开发人员在更新时始终可以获得一组一致的兼容代码和库。

为了实现您想要的,您可以按照以下步骤操作:

  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

这将创建一个子存储库目录,其中包含指定存储库的内容,mytag只要您不手动更新到其他内容,该目录就会保留在标签上!

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

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