【发布时间】:2015-06-14 12:02:00
【问题描述】:
我们有一个“通用模块”存储库,在不同的项目存储库之间共享。我们面临的问题是,如果您回到项目的早期版本,我们无法真正知道该项目使用了哪些“通用模块”修订版。我们可以检查日期和时间戳,看看它们是否匹配,但必须有另一种更优雅的方法来做到这一点。通用模块存储库不会像项目本身那样频繁更改。我的问题是:您如何处理这个问题以及最佳做法是什么?
【问题讨论】:
标签: mercurial revision-history
我们有一个“通用模块”存储库,在不同的项目存储库之间共享。我们面临的问题是,如果您回到项目的早期版本,我们无法真正知道该项目使用了哪些“通用模块”修订版。我们可以检查日期和时间戳,看看它们是否匹配,但必须有另一种更优雅的方法来做到这一点。通用模块存储库不会像项目本身那样频繁更改。我的问题是:您如何处理这个问题以及最佳做法是什么?
【问题讨论】:
标签: mercurial revision-history
我认为您所追求的有几个选择,尽管我认为两者都只会对未来有所帮助,并不能真正修复您过去的历史。
子存储库
Subrepos 是最初的 Mercurial 解决方案。
您将通用模块存储库克隆到您的主项目工作副本中,并将其工作副本更新为您要使用的修订版。
然后你设置了一个 .hgsub 文件,它告诉主项目它有一个子仓库,它应该去哪里以及它的来源。
然后,当您提交主项目时,会提交 .hgsub,并将通用模块工作副本的哈希值保存到 .hgsubstate 文件中的修订版中。
但是他们有问题,
Here's a good walkthrough on using subrepos.
访客回购
我从未使用过这些,所以我无法评论它们的优缺点,甚至它们的用途,但这里有一个指向 Guest Repos Extension 的链接。 我认为这个想法是它比 subrepo 设置更容错,所以如果客户 repo 源丢失或指定的变更集丢失,它更容易修复。
我还看到了对嵌套存储库的引用,这与来宾存储库略有不同,但我不确定它们是否真的是不同的东西。
【讨论】:
除了使用子存储库等之外,另一种选择是使用Peru 之类的工具,它可以使存储库同步成为显式手动操作,也可以用作构建过程的一部分。如果您需要与组织外部的存储库、使用不同 VCS(或根本不使用)的存储库等集成,这将特别有用。
【讨论】: