我很好奇 Mercurial 是否可以做到这一点。我想在一个项目中有一个子存储库,它总是固定到手动指定的变更集,或者更好的是 - 标记。
基本上我想要实现的是在主仓库中有一个核心系统,然后是子仓库中的所有模块和组件,但我不希望这些子仓库指向小费,只指向这些组件/模块的主要版本(因此标签)。
我很好奇 Mercurial 是否可以做到这一点。我想在一个项目中有一个子存储库,它总是固定到手动指定的变更集,或者更好的是 - 标记。
基本上我想要实现的是在主仓库中有一个核心系统,然后是子仓库中的所有模块和组件,但我不希望这些子仓库指向小费,只指向这些组件/模块的主要版本(因此标签)。
子存储库完全按照您的意愿工作。
Mercurial 永远不会自动将 subrepo 更新为小费。它始终停留在您选择的变更集上。从文档中:
Subrepos不会自动跟踪其源的最新变更集。相反,它们会更新为与在顶级变更集中签出的变更集相对应的变更集。这样一来,开发人员在更新时总能获得一组一致的兼容代码和库。
要实现您想要的,您可以按照以下步骤操作:
echo subrepo = https://example.com/subrepo/repo/path > .hgsub
hg add .hgsub
hg clone https://example.com/subrepo/repo/path subrepo
hg -R subrepo update mytag
hg commit
这将创建一个包含指定存储库内容的子存储库目录,mytag
只要您不手动更新到其他内容,该存储库就会保留在标签上!
克隆您的存储库的每个人都将拥有与您相同的变更集的子存储库(即mytag
)。
仅供参考,子存储库更新到的变更集存储在.hgsubstate
主存储库根目录的文件中。