我很好奇Mercurial是否可以做到这一点。我想在项目中有一个subrepos,它总是固定在手动指定的变更集上,或者更好 - 标记。
基本上我想要实现的是在主仓库中拥有一个核心系统,然后在子目录中拥有所有模块和组件,但我不希望这些子目录指向提示,只是指向那些主要版本的主要版本组件/模块(因此标签)。
答案 0 :(得分:3)
子存储库的工作方式与您想要的完全相同。
Mercurial永远不会自动将subrepo更新为tip。它始终保持您选择的变更集。来自documentation:
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
这将创建一个subrepo目录,其中包含指定存储库的内容,只要您不将手动更新为其他内容,该目录将保留在mytag
标记上!
每个克隆您的存储库的人都会在与您相同的变更集上拥有子参数(即mytag
)。
仅供参考,更新子订单的变更集存储在主存储库根目录的.hgsubstate
文件中。