我正在使用许多模块的应用程序,每个模块都有自己的mercurial存储库。
我最初认为将模块放在单独的存储库中是好的,但经过几次发布后,我觉得有些不对劲。在所有模块中创建分支和标签真的很痛苦。
大多数(如果不是所有)模块都遵循类似的发布周期。
我应该继续使用单个存储库来存储所有模块吗?或者有更好的方法吗?
答案 0 :(得分:3)
所有模块的单个存储库意味着它们在开发生命周期中紧密耦合:
如果您的软件的“v1.2”对于您的每个模块都有任何意义,那么是的,将它们全部放在一个回购中是有用的。
如果某些模块处于v2.4而另一个模块处于v3.6,而另一个模块处于“v4.5”和......,那么将独立模块声明为subrepos是最好的。
如果您正在共享组件和通用框架库等内容,则它们属于自己的存储库
哪个是对的,因为所述组件和一般框架库的开发生命周期与主程序之一完全无关
但OP补充道:
我们有两套模块:
- 一组可以在许多应用程序中重复使用的核心模块
- 相应应用程序的另一组模块
因此,其中一些模块(“核心模块集”)可以保留为子目录(由父级仓库和主项目引用的独立仓库)。
其他人可以直接合并到父级仓库(有点像git subtree merge strategy),你提到的Hg提示:“Combining Repositories”
答案 1 :(得分:2)
如果所有这些模块属于单个项目,则它们应该具有单个存储库。模块代码可以在单个仓库中的目录中分组。
[编辑:根据评论]
结构如下:
在这种情况下,平台或核心模块可以以与app模块不同的速度开发。最好将它们分隔成单独的存储库。最初,它看起来很诱人,它们都可能遵循类似的发布周期,但在任何典型的平台/应用程序开发中,它们都会独立出去并且不同步。至少这是我的经历。
P1 -------P2 ------P3 ------p4
A1------A2--------------A3--------- (A1, A2, A3 utilize platform P1, P2, P3..)
B1--------B2----------B3--------- (B1, B2, B3 utilize platform P1, P2, P3..)
A3------------------B3--------------
答案 2 :(得分:0)
在所有模块中创建分支和标签真的很痛苦
因为这根本不需要 (“在所有模块中”)。
如果您使用Subrepo(或更好,GuestRepo - 完全为您的用例创建并补偿某些subrepo的缺点)扩展和您的产品是“SuperRepo”,其中只包含链接子| guestrepos,然后:
对于所有子回购的Superrepo状态中的每个和每个变更集已知且预定义(每个定义包含外部回购的变更集ID)。因此:
从POV的灵活性和可管理性来看,我仍然更喜欢单独的回购每个低级模块(自给自足的对象,没有外部依赖)和GuestRepo用于收集产品中的模块和管理产品在它的生命周期中 - 我无法在这里看到“分支|标记噩梦”