假设我们有以下(Visual Studio)项目(简化):
我想知道在一个或多个Mercurial存储库中组织这个项目结构的好方法。我们目前使用Subversion并将依赖库包含为外部。
现在一种方法是将 product-1 中的所有内容放在一个存储库中,因为所有这些产品总是作为单个包一起发布。我觉得这个解决方案最为舒服,因为我对如何处理存储库非常肯定。但是如何在不重复 base-lib-1 的情况下适合 product-1 ?
作为替代方案,我考虑使用可以组织这样的子存储库:
这种方法的问题在于我从未使用过subrepos,因此我不确定此解决方案会出现任何陷阱。
例如,subrepos的行为类似于SVN外部,因为您可以决定是否始终使用每个子参数的最新版本或固定版本吗?
如果您进行更改,subrepos的行为方式如何在 base-lib-1 和 product-2 的同时? Mercurial是在同一步骤中处理的那些,还是必须手动提交/推送和提取/更新所有内容?在这种情况下, base-lib-1 的子代码如何在 product-package-A 中表现?
如果我想开发一个需要更改多个子目录的新功能分支,那么分支在这种情况下是如何工作的?我是否必须手动分支和合并每个存储库,还是由Mercurial处理?
使用subrepos来组织大型项目还有其他任何陷阱吗?在Mercurial中处理具有多个依赖项的大型项目的首选方法是什么?
答案 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之前,这些东西并没有真正得到用户界面。