管理多个代码分支和交付

11

我在一家小型单产品单客户的公司工作,现在正在转型为一家单产品多客户的公司。虽然我们只有一个客户,但是我们有不同的项目和不同的交付日期,但对于每个项目,我们都能够交付最新的月度版本,我们将其保留在一个单独的代码分支中,以防需要针对该特定版本进行错误修复。

最近,我们获得了许多新客户,并出现了一个新问题:总分支通常会解决(而不破坏功能)许多不同的客户特定问题,而并非所有客户都想要所有更改,而是更喜欢挑选修复和功能。

您是否有处理此情况的经验,如何在不被测试和工作超载的情况下实际处理它(我们的月度发布测试需要约3天的计算机时间)? 在版本控制方面,您如何管理(我猜cvs最终将不得不离开...)?

4个回答

6
最简单的解决方案是将产品分为核心产品和每个功能模块。这样,每个客户都可以挑选他们想要的功能模块。但即使这个解决方案也可能会迅速压垮一家小公司。
实际上,你通常处于更糟糕的情况:你有一个新功能可以帮助客户A,但会破坏客户B的某些东西(比如说,客户B没有准备好修改他们的数据库,而新功能在没有这种更改的情况下无法工作,因此实际上使新版本对客户B不可用)。如果你很大,你可以简单地忽略客户B。
目前,你真的需要找到一种方法来说服你的客户继续前进。最简单的方法是钱:告诉他们定制产品需要花费多少钱,如果你能找到一个适合所有人的解决方案,他们可以节省多少钱。邀请你的客户过来,一起建立变更列表,并让每个人都同意该计划。
此外,你真的必须拥有自动单元测试,这样你就可以100%确定今天离开公司的产品不可能比四周前销售的产品更差。
即使使用最好的版本控制系统(对我来说,那应该是git),如果不能让所有人朝着同一个方向拉取(除非当然你真的可以将每个客户端分成插件),就无法解决扇出问题。

4
我们有一个类似的设置,其中包括一个(相当专业的)产品和多个客户(但只有数百个),他们都希望拥有自己的专属功能。
在我看来,您可以选择“现成”的路线,其中您的产品不是针对特定客户的,并且您添加的任何功能都是产品的优点(可能是按照客户要求),或者您可以走定制、咨询路线,每个客户都有自己的独特版本的产品。
如果您的所有客户都需要基本相同的产品,那么您应该选择第一条路线,这意味着所有功能都适用于所有客户。
隐藏功能很容易,但维护多个并发版本是一场噩梦!
如果您的客户要挑选他们的功能,则可以采用一种解决方案,即为每个客户维护分支,然后非常小心地从主分支复制相关更改。
这意味着您的提交应尽可能原子化 - 只修复一个问题 - 并且不应直接将更改放入客户分支中。但这种方法仍然非常危险。

我认为更好的解决方案是为每个功能单独创建一个“主题”分支,而不是挑选功能进行精选,选择要合并到最终版本的分支。针对不同客户的“生产”分支也可能是一个好主意。 - Jakub Narębski

1

在这种情况下可以使用CVS(虽然我建议您看看其他选项,如SVN)。

我曾经参与过一些类似的项目。我们做的是有一个“公共”分支,用于系统的核心功能,以及一个“客户”分支,用于每个产品变体,这样您就可以实现每个客户的特定功能和错误修复,并仍然将更改应用于产品的所有变体中的“公共”部分。

不过,这种方法需要大量的配置管理工作(合并和构建),因此您可能需要有一个专门负责这些任务的人。

编辑:

此外,如果您还没有,请使用缺陷跟踪器系统,在其中记录您正在处理的客户/分支。


0

只支持主干,除非有一个分支解决了主线不存在的问题或功能。

我知道你说有些客户不想要这样,但我已经看到了许多分支支持的最终结果。你不想要那样的事情。这会是一场噩梦,并会削弱你的开发、产品和测试团队。

别这么做。

要果断。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接