什么时候用分支:  例如为某个客户定制的专用版本,和主干的特性有很大差别.不具通用性的需求.

大的版本修改,例如2.0 到3.0 加了很多特性,但2.0 还有维护.改bug

什么时候用标签: 小版本的发布, 如2.1.1到2.1.2.

分支的优点: 清晰,容易操作,程序员只要get latest/checkin latest就可以了

分支的缺点: 合并比较麻烦, 解决方法是要么是定期同步或者干脆不同步.

标签的优点: 灵活

标签的缺点: 如果要对某个label的版本进行hotfix, 操作起来比较麻烦, 要先get specific version by label, 然后修改代码,checkin之后会产生一个新的changeset, 然后在一个workspace里面get labelversion,然后get changset, 重新label一个version.来发布hotfix. 发布之后还要把之前latest的代码copy一份,重新check in latest

========================================

有策略地进行分支

源代码是开发工作中的一项重要资产。但如何在多个开发人员同时处理文件更新时有效管理和演化源文件成为了一个难题。可以使用版本控制系统在共享储存库中存储源代码、隔离并行开发工作、集成代码更改以及恢复以前的文件版本。版本控制中的一个关键元素是分支,利用分支可进行同步开发。如果有策略地进行分支,则可保持软件的多个版本的顺序和一致性。

Team Foundation 提供一个灵活可靠的版本控制系统。您可以使用 Team Foundation 版本控制管理开发源代码、文档、工作项和由团队处理的其他关键信息的过程中的多个版本。有关 Visual Studio Team Foundation Server 中的版本控制的更多信息,请参见使用版本控制。

在通过多个项目发布同时引入了多个更改时,团队如何管理代码?


在使用版本控制系统时,您必须考虑如何设置分支结构。可以通过镜像源代码文件来创建一个分支。然后,可以在不影响源的情况下更改该分支。例如,如下图的分支结构所示,MAIN 分支包含已通过集成测试的已完成功能,而 DEVELOPMENT 分支包含团队正在构建的代码。当 DEVELOPMENT 分支中的新功能完成并可通过集成测试时,您可以将代码从 DEVELOPMENT 分支提升到 MAIN 分支中。此过程称为“反向集成”。反之,如果您将代码从 MAIN 分支合并到 DEVELOPMENT 分支中,则此过程称为“正向集成”。

有关如何创建和合并代码分支的更多信息,请参见 CodePlex 网站上的以下页面:Team Foundation Server Branching Guide 2.0(Team Foundation Server 分支指南 2.0)。

分支和合并需要遵循下列原则:

  1. 每个分支都必须具有一个定义的策略,此策略与如何将代码集成到相应分支中有关。例如,在上图的分支结构中,可以指定一个团队成员来拥有和管理 MAIN 分支。该成员负责执行初始分支操作、将更改从 DEVELOPMENT 分支反向集成到 MAIN 分支,以及将更改从 MAIN 分支正向集成到 DEVELOPMENT 分支。当 MAIN 分支也从其他分支集成更改时,正向集成非常重要。

  2. MAIN 分支必须包含已通过集成测试的代码,以便始终准备进行发布。

  3. 由于团队成员会定期签入更改,因此 DEVELOPMENT(或工作)分支将不断演变。

  4. 标签是分支中的文件在某个特定时间的快照。

    有关更多信息,请参见使用标签获取文件快照。

利用 Team Foundation Build,可以从分支的几种生成类型中进行选择:手动、连续、封闭、滚动和计划。建议 MAIN 分支具有封闭签入生成类型。这意味着,DEVELOPMENT 分支必须先通过 MAIN 分支的所有要求,然后您才能提交反向集成。DEVELOPMENT 分支应运行连续生成类型,因为团队必须尽快了解影响 DEVELOPMENT 分支的新签入的发生时间。

团队应采用何种频率进行反向集成和正向集成?


如下图所示,反向集成和正向集成应至少在用户情景完成时进行。虽然每个团队对于完成的定义可能不同,但完成用户情景通常意味着完成了功能和对应的单元测试。只能在单元测试验证 DEVELOPMENT 分支的稳定性后反向集成到 MAIN 分支中。

如果您具有多个工作(即 DEVELOPMENT)分支,则当任意分支集成到 MAIN 分支时应立刻正向集成到所有工作分支。因为 MAIN 分支保持稳定,所以正向集成是安全的。工作分支中可能会发生某些冲突或失败,这是因为无法保障工作分支是稳定的。

应尽快解决所有冲突,这非常重要。通过对 MAIN 分支使用封闭签入,可以使反向集成变得简单得多,因为质量要求可帮助避免 MAIN 分支中发生冲突或错误。有关更多信息,请参见签入到由封闭签入生成过程控制的文件夹。

团队如何管理实现不同用户情景的源?


如下图所示,可以定期将更改签入工作分支以完成用户情景。可以在同一分支中同时实现多个用户情景,但仅当所有进行中的工作都已完成时才能反向集成到 MAIN 分支。建议您按照类似大小对用户情景进行分组,因为您不希望大用户情景阻止多个小用户情景的集成。可以将两组用户情景拆分为两个分支。

团队应在何时添加分支?


以下情况下应创建分支:

  • 在必须按与现有分支不同的时间表/周期发布代码时。

  • 在代码需要不同的分支策略时。如果创建具有新策略的新分支,则可以为项目增添策略价值。

  • 在向客户发布功能且团队打算进行不影响计划的发布周期的更改时。

不应对每个用户情景创建分支,因为这会产生较高的集成成本。虽然通过  可方便地进行分支,但在分支很多时,管理分支的开销可能会很大。

从版本控制的角度,团队如何管理发布?


团队应能在任意冲刺 (sprint) 末尾发布代码。通过使用 Team Foundation Server,可以标记一个分支以在某个特定时间点为代码拍摄快照。如下图所示,可以为发布标记 MAIN 分支。这样,您可以将分支返回到此时间点时的状态。

因为必须在发布时实现更新,所以为发布创建分支可帮助团队继续独立处理下一个冲刺 (sprint),而不会与将来的发布产生冲突。下图显示了一个分支,该分支包含更新代码,随后在第二个冲刺 (sprint) 末尾进行发布后,该分支反向集成到 MAIN 分支。

在为发布创建分支时,应从 MAIN 分支(该分支最稳定)创建分支。如果您从工作分支对发布进行分支,则会导致集成问题,因为无法保证工作分支的稳定性。

http://msdn.microsoft.com/zh-cn/library/ee782536.aspx

http://msdn.microsoft.com/zh-cn/magazine/gg598921.aspx

==================

标签是逻辑上的

分支是物理上的

标签历史版本比较、在修改时,中间做应急发布不方便,多任务并发,多团队合作有问题,客户端一个版本。

分支可在任意时刻在主线上发布、修复应急bug、专用版不影响主线,客户端多个版本,容易混乱。

标签和分支的作用:大版本区分。

标签在出现hotfix,并发任务,人员放假回家的情况,大团队作业的情况确实不好。

【转】TFS上分支和标签的用法相关推荐

  1. 9.mybatis动态SQL标签的用法

    mybatis动态SQL标签的用法 动态 SQL MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦 ...

  2. html section 布局,section标签的用法

    标签的用法 由于昨晚发了一篇文章 http://www.zcool.com.cn/article/ZMzA3MzI=.html ,有一个网友评论问 的用法.所以现在举例来说明一下: html5引入了标 ...

  3. Git仓库完整迁移,包括分支和标签和日志

    早上刷新闻, GitHub也会断供:美国制裁地区帐号都受限,毫无预警, 保险起见,迁移到aliyun吧 度娘了一堆git仓库迁移的内容,一个个都比较麻烦,而且本地下了代码,还要删去库地址,再切换到新库 ...

  4. 点石互动--枫林之:Robots Meta标签及其用法

    点石互动   枫林 发表于 03月 7, 2007 Robots Meta应该放置在网页的什么位置呢? 跟任何一种META标签是一样的,Robots Meta放置在HTML网页代码的HEAD之内. & ...

  5. html5才有的标签是什么意思,html5header标签是什么意思?html5header标签的用法详解(附实例)-...

    本篇文章主要的向大家介绍了关于html5 header标签的元素的基本介绍,和header标签的用法实例解析.下面就让我们一起来看看这篇关于html5 header标签的文章吧 一.首先我们来说说ht ...

  6. html标签验证的作用,HTML元素blockquote标签的用法及作用

    html元素 标签主要用于引用长文本,有关该标签的用法及作用详解如下: 标签的定义 标签是引用一段长文本内容: 标签是一个块元素,引用的文本内容会形成一个独立的引用块: 标签引用的文本内容会在左右两端 ...

  7. html中ul和li标签的用法介绍

    普通的显示数据的时候,ul就是项目列表,li就是列表项,可以用来显示数据,如果用于DIV+CSS布局的话,ul+li可以替换表格的作用,具体的设置,如果宽度高度.行间距.背景边框需要配合CSS一起设置 ...

  8. s:set标签的用法

    1.  s:set标签 格式:<s:set name="" value="" scope=""/> 说明:把jsp页面中的一个值 ...

  9. H5 video 标签的用法及问题

    h5的video标签的用法及问题 关于HTML5视频标签的问题 一.基本 *video标签在兼容性上还是比较差的,如果要在页面中使用video标签,需要考虑三种情况,支持Ogg Theora或者VP8 ...

最新文章

  1. HALCON标定倾斜安装镜头
  2. 在哪里学python比较好-学Python从哪里开始?
  3. eclipse 拨打电话、拨号,发短信
  4. Apache配置(转载)
  5. 安卓修改wifi已停用_手机连不上wifi显示已保存怎么回事【原因介绍】
  6. 接口测试文件上传(python+requests)
  7. 5个很好用的.net 分析工具
  8. python-Python教程
  9. ASP.NET 2.0 中 Web 事件
  10. 单片机和opencv_OpenCV开发笔记(六十四):红胖子8分钟带你深入了解SURF特征点...
  11. Github删除一个无用库
  12. AngularJS - uib-datepicker-popup - 日期控件
  13. 当当图书每满100减50,两种优惠券助你两手薅羊毛
  14. java detach_Java Node.detach方法代码示例
  15. python怎么写excel数据透视自动报表_使用Python生成自动报表(E
  16. 认识黑客常用的入侵方法
  17. android-帧动画(原地不动人再走路)
  18. 网站设计开发的步骤和方法!
  19. 中外合作办学计算机科学与技术有哪些大学,校友会2017中外合作办学大学计算机科学与技术专业排行榜...
  20. 展望2007,十类经典装机软件(全心收集了39款!)

热门文章

  1. Oracle创建表_01
  2. Exception from HRESULT: 0x800A03EC
  3. java中CardLayout的使用方法
  4. 基本矩阵运算的Java实现
  5. unity3d 捕获系统日志,来处理一些问题
  6. NSString 中包含中文字符时转换为NSURL
  7. 企业效益真的向好么?
  8. [Leedcode][JAVA][第9题][回文数][数学法]
  9. 微机计算机原理姚向华课后答案,微型计算机操作系统
  10. OpenCV中cvResize函数图象放缩