大项目布局:在多个子项目上添加新功能


13

我想知道如何使用版本控制管理系统来管理具有许多组件的大型项目。

在我当前的项目中,有四个主要部分。

  1. 网页
  2. 服务器
  3. 管理控制台
  4. 平台。

Web和服务器部分使用了我编写的2个库。总共有5个git存储库和1个mercurial存储库。项目构建脚本位于平台存储库中。它使整个构建过程自动化。

问题是当我添加一个会影响多个组件的新功能时,我必须为每个受影响的存储库创建分支。实施功能。合并回去。我的直觉是“出事了”。

那么我应该创建一个单一的仓库,并将所有组件放置在那里吗?我认为在这种情况下分支会更容易。或者我只是做我现在正在做的事情。在那种情况下,我该如何解决在每个存储库上创建分支的问题?


您是否可以重新安排功能,以尽可能地将其放置在共享库(Ruby gem,Python蛋,Java bean等)中,然后以“从库中“组成”每个元素的方式组装零件?
Narfanator 2013年

想想我们何时在服务器组件上添加新的协议支持。我们还必须在网络中为此添加适当的交互控件(按钮,字段等)。那就是问题
Shiplu Mokaddim

1
这听起来像是“桥梁”模式。您可能会从中得到启发。
Narfanator 2013年

一个资料库来统治所有人
Steven A. Lowe 2013年

Answers:


8

在您描述的情况下,拥有多个存储库并没有获得任何好处,但是您却付出了一定的代价:您无法回滚到较旧版本的存储库,并且对系统将继续运行充满信心。这是因为您的代码在存储库之间紧密耦合。由于对回滚功能的信心是源代码控制的主要好处之一,所以这不是您想要的情况。

解决方案是根据其中的代码耦合来定义存储库结构:如果项目组件A与项目组件B仅共享稳定接口,则可以将它们放置在单独的存储库中。否则,它们应位于同一资源库中。更加精细的存储库布局将反映出更好的分解系统体系结构。


2

如果您的每个存储库都是独立的项目或库,那么我想说,在添加跨项目的新功能时,在每个存储库上创建功能分支并没有什么天生的错误。通过独立运行,可以对每个版本进行独立版本控制,并且可以弃用旧的API。

但是在您的特定情况下,听起来您的存储库可能没有有效地对代码进行分组。如果对一个存储库中的代码进行更改需要对其他存储库进行更改(不建议弃用),那么您的耦合太紧或应该重新组织存储库。

如果所有存储库确实是同一项目的一部分(它们不能独立存在),那么也许您应该只有一个存储库。(或者可能是2:主要项目,另一个是通用/标准化功能。)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.