源控制 - 每个产品都需要单独的分支吗?

时间:2009-07-10 14:55:24

标签: svn version-control tfs branch

假设您有四种产品,每种产品都有自己的发布时间表。每种产品都有50%的共享代码(所有产品的通用功能)和50%的产品特定代码。

每个产品是否需要单独的源代码控制分支?是否应始终在四个产品分支之一中开发共同功能,并在以后合并到其他产品中?

典型情景:产品A将于下个月发布,需要核心(共享)增强1,产品B将在四个月内发布,并需要核心(共享)增强2(需要三个月才能完成)。

8 个答案:

答案 0 :(得分:3)

我将共享代码保存在自己的产品文件夹中。然后使用svn:externals在其他产品中共享代码。处理分支和合并有点痛苦,但它比在存储库中拥有共享代码的四个副本更好。像这样的东西(用/branches/RB-1.0.0或/tags/REL-1.0.0替换trunk用于发布分支和标记版本):

/core/trunk
/product_a/trunk
  /core (svn:externals 'core /core/trunk')
/product_b/trunk
  /core (svn:externals 'core /core/trunk')
/product_c/trunk
  /core (svn:externals 'core /core/trunk')
/product_d/trunk
  /core (svn:externals 'core /core/trunk')

UPDATE0 :注意/product_a/tags/REL-1.0.0可能使用/ core/tags/REL-1.0.0而/product_b/tags/REL-1.0.0可能使用/芯/标签/ REL-1.1.0

答案 1 :(得分:2)

可以在单独的平台分支中开发通用功能,每个产品都有自己的分支用于特定于产品的开发。

答案 2 :(得分:1)

不能直接回答你的问题,因为我不能100%确定可以给出“一刀切”的答案。但杰夫写了一篇很棒的blog post around branching

答案 3 :(得分:1)

以下是IMO关于分支的最佳文章之一:Branching and merging in the face of agile development, extreme programming, team collaboration, and parallel releases

我想我想避免耦合两个项目的分支(以及时间表):所以,而不是一个分支,在这个分支中你正在编辑常用功能并编辑多个产品,也许是以下两种选择:

1)独立于任何产品开发通用功能

  • 分支常用功能
  • 添加到它
  • 单元测试
  • 将其提交回主线
  • 制作产品特定的分支(主线)并在产品中使用

2)使用一种产品开发通用功能

  • 制作产品分支
  • 在产品分支中,向公共库以及特定于产品的组件添加新功能
  • 对其进行单元测试并对其进行系统测试并将其提交回主线
  • 制作新主线的分支,您可以在其中使用其他产品中新提交的常用功能

答案 4 :(得分:1)

在树的最高点分支。 IE,包含所有项目,共享模块的代码......以及文档/构建脚本/安装程序/等等。为什么?为什么不!在目前为止提到的所有系统中,分支机构都很便宜(SVN,TFS,Perforce,git)。

这种策略在使用“路径空间”分支(TFS,Perforce)的系统中尤为重要。否则,生成在不同人员工作空间中保持一致的完整产品套件的构建将成为维护的噩梦。

一旦将其付诸实践,您可以在给定分支中随意修改代码库中的代码库。您始终可以执行完整构建来验证集成问题;在任何一组分支之间合并任何组件的选项仍然对您开放。但 SDLC策略的问题完全正交。您可以分支每个功能,每个团队,每个版本或上​​述任意组合;您可以根据自己的喜好定义前向/反向集成标准。*每个分支恰好是超集的事实证明在许多策略中都是有利的,只要您的工具能够应对挑战,就永远不应该是一个骗局。

*选择策略是个别问题,取决于很多因素。其他人提出了一些有助于您决定的知名文档。我将最新版本的Microsoft's TFS guidance与其中最好的一起放在那里。

答案 5 :(得分:0)

将它们全部放在一个分支中。您希望在开发时知道产品A的更改是否会破坏产品B.当您发现ProductB必须重写其他3个依赖的常用代码库的一半时,这比进入合并混乱要好得多。< / p>

编辑:澄清一下,我的意思是他们都应该共享一个开发分支。我建议一个单独的Production分支代表生产中的代码,如果你定期修复bug修复,我会建议维护分支。

答案 6 :(得分:0)

我们有类似的情况。我们有用于记录,数据访问和安全性的通用库,但这些库用于多个项目。我们所做的是为每个产品创建一组单独的分支,然后使用SVN外部链接到公共库。因此,公共库在所有项目的“共享”分支中维护,而所有项目本身都有独立的分支。

通过这种方式,我们可以确保所有产品都针对最新版本的公共库进行构建,同时项目也可以独立维护。

答案 7 :(得分:0)

我们使用git构建了一系列具有共同基础和大量自定义代码的站点,将其构建为一系列分支。

主分支包含核心代码,该主分支的每个分支都是核心的特定定制。在对核心进行更改时,很容易将它们推向分支,同时保持每个自定义版本的隔离。

18个站点,以及一个7人团队的12个月以上的项目,它仍然受到控制!