1

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

  • 基础库 1
  • 基础库 2
  • product-1:取决于base-lib-1
  • product-2:取决于base-lib-1base-lib-2
  • product-3:取决于base-lib-1base-lib-2并用作product-2中的组件
  • 产品 4:像产品 3

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

现在一种方法是将除product-1之外的所有内容放在一个存储库中,因为所有这些产品总是作为一个包一起发布。我会对这个解决方案感到最舒服,因为那时我会很确定如何处理存储库。但是如何在不复制base-lib-1 的情况下将product-1适合该方案?

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

  • 产品包-A
    • 基础库 1
    • 产品-1
  • 产品包-B
    • 基础库 1
    • 基础库 2
    • 产品-2
    • 产品-3
    • 产品-4

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

例如,子存储库的行为是否像 SVN 外部一样,因为您可以决定是始终使用每个子存储库的最新版本还是固定版本?

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

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

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

4

1 回答 1

2

您的问题与此处经常被问到的问题几乎完美重复,但我在快速搜索中找不到很好的参考,因此您可以:使用 subrepos

一次回答一个子问题:

例如,子存储库的行为是否像 SVN 外部一样,因为您可以决定是始终使用每个子存储库的最新版本还是固定版本?

子存储库与特定版本挂钩,父项目指定哪个版本。

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

hg commit逗号?nd 有一个--subrepos选项,因此您可以选择递归提交或不提交(参见 参考资料ui.commitsubreposman hgrc。Push 总是推送 subrepo 更改。

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

是的,您将在每个 repo 中手动分支和合并。

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

只需先做一个测试场景并练习。另外,确保人们有新的客户。这些东西直到 2.1.x 才真正在 UI 方面得到完善

于 2012-08-06T13:55:51.690 回答