【问题标题】:"linking" revisions of two repositories“链接”两个存储库的修订
【发布时间】:2015-06-14 12:02:00
【问题描述】:

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

【问题讨论】:

    标签: mercurial revision-history


    【解决方案1】:

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

    子存储库

    Subrepos 是最初的 Mercurial 解决方案。
    您将通用模块存储库克隆到您的主项目工作副本中,并将其工作副本更新为您要使用的修订版。
    然后你设置了一个 .hgsub 文件,它告诉主项目它有一个子仓库,它应该去哪里以及它的来源。
    然后,当您提交主项目时,会提交 .hgsub,并将通用模块工作副本的哈希值保存到 .hgsubstate 文件中的修订版中。

    但是他们有问题,

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

    Here's a good walkthrough on using subrepos.

    访客回购

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

    我还看到了对嵌套存储库的引用,这与来宾存储库略有不同,但我不确定它们是否真的是不同的东西。

    【讨论】:

    • 也祝你圣诞和新年快乐@Bharata :)
    【解决方案2】:

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

    【讨论】:

    • 看起来不错的工具!暂时可能有点复杂。谢谢!
    • 我建议类似的东西的原因(你不需要这个特定的工具,很容易推出 DIY 解决方案)是几乎任何 VCS 中的子存储库等都有很多隐藏的复杂性。 Mercurial 考虑subrepositories a "feature of last resort" 是有原因的。最大的问题是存储库操作变得非原子化,你会突然遇到很多与 CVS 类似的问题。分支和合并可能会变得特别痛苦。
    猜你喜欢
    • 2018-06-27
    • 1970-01-01
    • 1970-01-01
    • 2013-02-07
    • 2012-09-14
    • 2016-10-06
    • 1970-01-01
    • 1970-01-01
    • 2010-10-12
    相关资源
    最近更新 更多