2012-08-04 69 views
1

假设我们有以下的(Visual Studio中)项目(简体):组织大型项目,善变

  • 基LIB-1
  • 基LIB-2
  • 产品-1:取决于base-lib-1
  • product-2:dependi纳克上基-LIB-1基-LIB-2
  • 产物-3:视基-LIB-1基-LIB-2和用作一个组件产品-2
  • 产品-4:像产品3

我想这将是一个好办法在一个或多个Mercurial存储库中组织此项目结构。我们目前使用Subversion并将依赖库作为外部参数包含在内。

现在,一种方法是将除产品-1之外的所有产品都放在一个存储库中,因为所有这些产品始终作为单个包一起发布。我会对这个解决方案感到最舒服,因为那时我会非常确定如何处理存储库。但如何在此方案中适合产品-1而不复制base-lib-1

作为替代我想过使用,将这样的组织一些子库:

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

这种方法的问题是我从来没有使用过subrepos,所以我不确定这个解决方案会出现什么缺陷。

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

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

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

使用subrepos组织大型项目还有其他缺陷吗?在Mercurial中处理大量依赖的大型项目的首选方式是什么?

回答

2

你的问题是,往往在这里问了一个问题的一个近乎完美的复制,但我不能找到一个快速搜索一个很好的参考,所以在这里你去:使用subrepos

以你子问题一次一个:

例如,不要在subrepos表现得像在SVN的外部可以 决定是否要始终使用每个 subrepo的最新或固定版本吗?

子回购被固定到一个特定的版本,并且父项目指定哪一个。

如何,如果你更改例如做subrepos行为在base-lib-1和 产品-2在同一时间?那些由Mercurial在相同的 步骤中处理过,还是您必须手动提交/推送和更新所有内容 ?在这种情况下,base-lib-1的subrepo如何在 product-package-A中运行?

这个hg commit是否逗号? 次需要--subrepos选项,这样你就可以递归提交或不根据你的选择(见man hgrc所有ui.commitsubrepos)。推动总是推动subrepo更改。

如果我想开发一个新的 功能分支,需要在多个subrepos中进行更改,分支在这种情况下如何工作?我是否有 手动分支和合并每个存储库,或者是否由 Mercurial处理?

是的,你会手动分支和合并每个回购。

使用subrepos来组织大 项目有没有其他的陷阱?在Mercurial中使用 许多依赖项来处理较大项目的首选方法是什么?

只是做一个测试场景第一和实践。另外,确保人们拥有新的客户。直到2.1.x之前,这些东西并没有真正得到完美的用户界面。