"linking" 两个存储库的修订

"linking" revisions of two repositories

我们的情况是,我们有一个 "general modules" 存储库,它在不同的项目存储库之间共享。我们面临的问题是,如果您返回到项目的早期版本,我们无法真正知道该项目使用了哪个 "general modules" 修订版。我们可以检查日期和时间戳,看看它们是否匹配,但必须有另一种更优雅的方法来做到这一点。通用模块存储库不像项目本身那样频繁更改。我的问题是:您如何处理这个问题?最佳做法是什么?

我认为对于您所追求的,有两种选择,尽管我认为这两种选择都只会对未来有所帮助,并不能真正修复您过去的历史。

子存储库

Subrepos 是针对您的问题的原始 Mercurial 解决方案。
您将通用模块 repo 克隆到您的主项目工作副本并将其工作副本更新为您要使用的修订版。
然后你设置一个 .hgsub 文件,告诉主项目它有一个 subrepo,它应该去哪里以及它的源在哪里。
然后,当您提交主项目时,.hgsub 将被提交,并且通用模块工作副本的哈希值将保存到 .hgsubstate 文件中的修订版中。

但是它们存在问题,

  • 递归提交和推送,这可能是不可取的;
  • 它们可能难以理解,因此是错误的来源;
  • 如果您移动源代码库,您的更新将失败,尽管 subpaths config option 可以解决这个问题。

Here's a good walkthrough on using subrepos.

访客回购

我从未使用过这些,所以我无法评论它们的优缺点,甚至无法评论它们的使用,但这里是 link 到 Guest Repos Extension。 我认为这个想法是它比 subrepo 设置更容错,所以如果来宾 repo 源丢失或指定的变更集丢失,它更容易修复。

我也看到过对嵌套存储库的引用,这与访客存储库略有不同,但我不确定它们是否真的不同。

除了使用子存储库等,另一种选择是使用像 Peru 这样的工具,它可以使存储库同步成为一种明确的手动操作,或者可以用作构建过程的一部分。如果您需要与组织外部的存储库、使用不同 VCS(或根本 none)等的存储库集成,这将特别有用。