用mercurial组织大型项目

时间:2012-08-04 09:05:08

标签: mercurial

假设我们有以下(Visual Studio)项目(简化):

  • 基-LIB-1
  • 基-LIB-2
  • product-1 :取决于 base-lib-1
  • product-2 :取决于 base-lib-1 base-lib-2
  • product-3 :取决于 base-lib-1 base-lib-2 ,并用作中的组件产物-2
  • product-4 :喜欢 product-3

我想知道在一个或多个Mercurial存储库中组织这个项目结构的好方法。我们目前使用Subversion并将依赖库包含为外部。

现在一种方法是将 product-1 中的所有内容放在一个存储库中,因为所有这些产品总是作为单个包一起发布。我觉得这个解决方案最为舒服,因为我对如何处理存储库非常肯定。但是如何在不重复 base-lib-1 的情况下适合 product-1

作为替代方案,我考虑使用可以组织这样的子存储库:

  • 产品封装-A
    • 基-LIB-1
    • 产物-1
  • 产品封装-B
    • 基-LIB-1
    • 基-LIB-2
    • 产物-2
    • 产物-3
    • 产物-4

这种方法的问题在于我从未使用过subrepos,因此我不确定此解决方案会出现任何陷阱。

例如,subrepos的行为类似于SVN外部,因为您可以决定是否始终使用每个子参数的最新版本或固定版本吗?

如果您进行更改,subrepos的行为方式如何在 base-lib-1 product-2 的同时? Mercurial是在同一步骤中处理的那些,还是必须手动提交/推送和提取/更新所有内容?在这种情况下, base-lib-1 的子代码如何在 product-package-A 中表现?

如果我想开发一个需要更改多个子目录的新功能分支,那么分支在这种情况下是如何工作的?我是否必须手动分支和合并每个存储库,还是由Mercurial处理?

使用subrepos来组织大型项目还有其他任何陷阱吗?在Mercurial中处理具有多个依赖项的大型项目的首选方法是什么?

1 个答案:

答案 0 :(得分:2)

您的问题与此处经常提出的问题几乎完美无缺,但我无法在快速搜索中找到一个好的参考,所以请转到:使用subrepos

一次提出一个子问题:

  

例如,subrepos的行为就像SVN外部一样   决定是否始终使用每个的最新版本或固定版本   subrepo?

子回购与特定版本挂钩,父项目指定了哪个。

  

如果您进行更改,subrepos的行为方式如何在base-lib-1和   产品-2同时?那些由Mercurial处理的是同样的   步骤或你必须提交/推送和拉/更新一切   手动?那么base-lib-1的subrepo会如何表现呢?   product-package-A在这种情况下?

hg commit逗号? nd采用--subrepos选项,因此您可以根据自己的选择递归提交(请参阅ui.commitsubrepos中的所有man hgrc)。推送总是推动子更改。

  

如果我想开发一个新分支,分支如何在这种情况下工作   功能分支,需要更改多个子目录?我有吗   手动分支和合并每个存储库或由此处理   水银?

是的,您将手动分支并合并每个仓库。

  

使用subrepos来组织大型网站是否存在任何其他缺陷   项目?处理大型项目的首选方式是什么?   Mercurial中的许多依赖项?

首先做一个测试场景并练习。此外,确保人们拥有新客户。在2.1.x之前,这些东西并没有真正得到用户界面。