我们处于这样一种情况:我们有一个“通用模块”存储库,它在不同的项目存储库之间共享。我们面临的问题是,如果您回到项目的早期版本,我们无法真正知道该项目使用了哪些“通用模块”修订版。我们可以检查日期和时间戳,看看它们是否匹配,但必须有另一种更优雅的方法来做到这一点。通用模块存储库不会像项目本身那样频繁地更改。我的问题是:你如何处理这个以及最佳做法是什么?
答案 0 :(得分:4)
我认为对于你所追求的目标有几种选择,虽然我认为这两种选择只对未来有所帮助,并且无法真正解决你过去的历史。
子储存库
Subrepos是您问题的原始Mercurial解决方案
将常规模块repo克隆到主项目工作副本中,并将其工作副本更新为要使用的修订版本
然后你设置一个.hgsub文件,它告诉主项目它有一个subrepo,它应该去哪里以及它的来源。
然后,当您提交主项目时,将提交.hgsub,并将通用模块工作副本的哈希值保存到.hgsubstate文件中的修订版中。
然而,它们存在问题,
Here's a good walkthrough on using subrepos.
访客回购
我从来没有使用过这些,所以我不能评论他们的利弊甚至是他们的使用,但这里是Guest Repos Extension的链接。 我认为这个想法是它比subrepo设置更容错,所以如果guest虚拟机repo源丢失或指定的变更集丢失,它就更容易修复。
我也看到了对嵌套repos的引用,这与guest repos有点不同,但我不确定它们是否真的是不同的东西。
答案 1 :(得分:1)
除了使用子存储库等之外,另一种选择是使用像Peru这样的工具,这使得存储库同步既可以是显式手动操作,也可以作为构建过程的一部分使用。如果您需要与组织外部的存储库集成,使用不同VCS(或根本不存在)等存储库,则此功能特别有用。