我一直在努力规范源控制结构为我们在新的一年Team Foundation Server的部署。我已经开始使用CodePlex上提供的Microsoft Team Foundation Server Branching Guidance文档。Team Foundation Server的源代码控制结构
我希望能得到一些反馈,并回答几个我对拟议结构的具体问题。当谈到在TFS中构建源代码控制时,我已经了解到有太多的“标准”可供选择,并没有真正的标准。
首先,我将概述,并描述决定和使用情况。
$/
{Team Project}/
{Subproject}/
Development/
Trunk/
Source/
Tests/
Sandcastle/
TeamBuildTypes/
{Build Name}/
Branches/
{Branch Name}/
Source/
Tests/
Sandcastle/
TeamBuildTypes/
{Build Name}/
Integration/
Source/
Tests/
Sandcastle/
TeamBuildTypes/
{Build Name}/
Production/
Releases/
{Release Version}/
Source/
Tests/
Sandcastle/
TeamBuildTypes/
{Build Name}/
Branches/
{Branch Name}/
Source/
Tests/
Sandcastle/
TeamBuildTypes/
{Build Name}/
一般的逻辑是,一个团队项目可以包含一个单一的逻辑项目(其中将不会有{Subproject}
条目)或多个相关项目的产品或工具套件的形式。三大容器称为Development
,Integration
和Production
。
在Development
容器的Trunk中,Source
文件夹中包含构成产品的两个项目都有相应的规定,Tests
文件夹中提供了相应的单元测试。大多数未成年人的发展会好发于躯干,与通过Trunk
文件夹的同级Branches
文件夹,它作为一个分支容器分支提供。一个或多个解决方案文件将存在于Trunk
之内,允许该级别的分支机构捕获解决方案,源代码和单元测试。
Integration
容器在非TFS实现中通常被称为“主”,仅用于集成来自Development
的变更集以创建稳定且可测试的构建。一旦达到可测试产品,它最初是作为从Development
容器的分支创建的。此容器的构建将用于我们的测试环境和负载测试环境。我们选择包含可测试构建的负载测试,以便我们可以监控性能变化,能够快速隔离可能导致任何违规行为的变更集。
Production
被用于生产预生产和生产质量的基础之上。一旦建议发布稳定版本,它最初是作为Integration
容器的分支创建的。在Releases
文件夹中,遵循“按发布分支”结构,在一个位置提供快照和隔离。 (例如,当Release 1.1
已准备好预生成版本时,稳定的Integration
容器会分支到Production/Releases
结构中的新文件夹Release 1.1
后续RC和RTW/RTM也被提升到此文件夹中。)分支结构也存在,如在Branches
容器中所见。这允许“修补程序”,通常是修订标记(Major.Minor.Revision)。该分支从当前版本创建并合并回新版本标记 - 如Release 1.1.1
。在接受之后,Changeset将被逆向整合到Development
集装箱的Trunk
。
我们觉得这种结构在健壮性和复杂性之间是一个公平的平衡。但是有一些唠叨的问题,我无法在逻辑上适合模型。它们是:
团队建设 - 该Development
和Integration
容器将首先开始了为每晚构建,最终转向持续集成(CI)。生产容器将被手动构建。
构建定义应该在哪里生存?编辑 - 基于几个响应,TeamBuildTypes文件夹已被移动到树干并分支到适当的容器。但是,这会产生一个新的问题(如下)。通过将TeamBuildTypes文件夹放在适当的容器中,这是否意味着所有构建定义将在适当的文件夹之间进行复制?例如,具有开发质量的构建定义以及可测试构建等,所有这些构建都存在于整个结构中的所有TeamBuildType文件夹中。
文档生成 - 我们使用桑德尔卡瑟生成文档。具体而言,我们也使用Sandcastle Help File Builder来管理输出。这会生成一个专用于SFHB格式的项目文件。
应该将生成的文档存储在源代码管理结构中吗?
应该为每个容器生成文档还是只对生产前质量和生产质量具有价值?
为了保持快速的本地构建时间,文档创建应该由构建定义拥有吗?
SHFB特定文件应该在哪里存在?我最初的想法是把它作为同行到我同意推荐,它是Source
和Tests
文件夹。Source
和Tests
的同行。图表已更改以反映此更改。
第三方二进制
应的二进制文件(控制,图书馆等)被存储在源控制?
如果是这样,它应该是它自己的团队项目吗?
一般文献 - 非生成的文档,例如要求,设计文档,测试计划等不打算由源控制结构的文件夹中反映出来。在与我的开发人员和同行进行了一些研究和讨论之后,使用Team Explorer中的内置Documents文件夹提供了更多好处,因为它反映了Team Project Portal中的结构,并且一些(商业)用户不需要额外的复杂学习源代码控制方面的TFS。
我将更新结构,因为我得到问题的答案以提供更清晰的图像。我也欢迎任何其他有关潜在变化的评论。如果我有任何其他问题,我会确保修改这篇文章。
编辑:
澄清。
Source
和Tests
文件夹也位于Integration
容器下。Micah和Josh都提到了关于第三方二进制文件的好处。问题添加了问题。
文档生成可能会很慢。添加了关于文档创建是否应由特定团队构建类型拥有的问题。
新增解决涉及非生成的文档,如需求,设计文档,测试计划等
新增的分辨率有关TeamBuildTypes文件夹构建defintions。
根据各种反馈,将TeamBuildTypes文件夹移至中继线/分支级别。
你拼错地基:) – thmsn 2008-12-19 13:54:31
这是一个非常棒的布局和解释。 – Micah 2008-12-19 13:59:13
呃!谢谢,thmsn! – 2008-12-19 14:00:26