假设我们有以下(Visual Studio)项目(简化):
- 基础库 1
- 基础库 2
- product-1:取决于base-lib-1
- product-2:取决于base-lib-1和base-lib-2
- product-3:取决于base-lib-1和base-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-1和product-2中进行更改,子存储库的行为如何?Mercurial 是在同一步骤中处理的,还是您必须手动提交/推送和拉取/更新所有内容?在这种情况下,base-lib-1的子存储库在product-package-A中的行为如何?
如果我想开发一个需要更改多个子存储库的新功能分支,那么在这种情况下分支如何工作?我必须手动分支和合并每个存储库还是由 Mercurial 处理?
使用 subrepos 组织大型项目还有其他陷阱吗?在 Mercurial 中处理具有许多依赖项的大型项目的首选方法是什么?