2013-11-22 19 views
1

我们正在更新从VSS到TFS2010的大型项目,我们需要建立良好的分支/合并策略。我们赞成功能分支,但我不知道我们是否应该只分支每个功能中受影响的子项目/文件(就像我们在VSS中那样),还是应该始终分支整个代码库并依赖懒惰的复制和良好的合并(就像在git/mercurial中)。在TFS中分支 - 像git一样分支整个代码库,或仅影响子项目?

我到目前为止发现的指南在线讨论分支策略(按发布,特征等分支),但不包括关于哪些文件/子项目您应该执行分支。

有没有“正确的方法”来做到这一点?假设我们有这样的设置:

Code 
| 
|- ModuleA 
|- ModuleB 
|- ModuleC 
|- ModuleD 

而且我们有一个影响ModuleA和ModuleD的特性F.我们会更好地分支Code还是ModuleA和ModuleD?

回答

2

如果你的功能影响的东西是用于整个代码库,分支你的整个代码库。您仍然希望让CI构建在您的功能分支上运行,因此您希望所有自动化测试都能像往常一样运行。

即使某个功能仅影响应用程序的一小部分,仍然希望能够对整个应用程序进行测试,以确保您没有引入任何重大更改。

我建议您阅读可从CodePlex下载的ALM Rangers' branching/merging guide

+0

分支整个代码库是否有任何损失...是像SVN/Git一样聪明,只会复制真正改变的文件?这在我看来更可取,因为它不是性能问题。 –

+0

是的,它的行为就像SVN和Git。分支机构既便宜又快速。 –

1

我对这个问题(Techdays,视频等)读很多东西,对我的项目采用此策略,它的建议作为最佳实践。

的执行需要执行以下任务:

1。创建截断的发展,躯干读取XYZ

注:发展是不能直接在树干上,而是介绍了一个服务包分支的女孩。

2。从树干一个新的子分支服务包创建,语言1.YZ

注:这个分支将举办首个专门开发的功能。

事件项目:第一次迭代结束(开发团队认为开发已完成)。

3。从Service Pack 1.YZ创建一个新的子分支修复为1.0.Z.

注:此分支包含目标特征的交付以下献给未来的bug修复所有事态的发展。

4。从修复1.0.Z创建。一个新的儿童分支Release 1.0.0。

注:

  • 该分支将保持只读。

  • 该分支是在生产环境中部署的唯一分支。

  • 这个分支是我们交付的图片。

  • 它允许您绘制不同的交付。

  • 它允许在需要的时候在回滚的版本执行操作(避免冲突的文件版本)。

事件项目:生产

  1. 交付往对生产环境1.0.0版本分支。

6。将Service Pack 1.Y.Z合并到X.Y.Z中继线

注意:此时所有分支都处于相同的进化级别。

事件项目:版本1.0.0上发生错误

7。可以通过两种方式处理错误:

■如果确定版本不稳定 进行修补程序修复分支1.0.Z.

  • 创建一个新的分支版本1.0.1

  • 交付分支版本1.0.1

  • 合并修复1.0.Z到Service Pack 1.Y.Z.

  • Merge Service Pack 1.Y.Z.到X.Y.Z

    注意:您可以迭代多次:1.0,1,1.0.2,1.0.3等。

■如果确定版本是稳定的,并且我们决定修复新交付的错误。 - 从Service Pack 1.Y.Z创建修正了一个新的子分支1.1.Z

  • 作出修正分支更正1.1.Z

  • 从修复1.1.Z.创建一个新的儿童分支发行版命名为1.1.0。

  • 交付1.1.0分支

    事件项目:一个重要的新功能来

8。从树干一个新的子分支服务包创建,语言2.YZ

重现相同的组织......

注:在我的博客我创作的发布