探索功能隔离策略
Azure DevOps Services | Azure DevOps Server 2020 | Azure DevOps Server 2019 | TFS 2018
是否打算在Azure DevOps中实施Team Foundation 版本控制的功能隔离策略? 你可能有几个问题,例如:
- 大型开发团队是否可行?
- 它是否与敏捷流程 () 保持一致?
- 独立功能分支的正确生存期是什么?
本文旨在回答这些问题,并让你清楚地了解 TFVC 中的功能隔离。 (有关 TFVC 分支策略总体指南,请阅读使用 TFVC.) 的分支策略
注意
本文介绍 TFVC。 对于 Git,请参阅 采用 Git 分支策略。
什么是功能隔离?
使用功能隔离策略,可以处理 功能 分支中的功能或修复 bug, (也称为“主题分支”,) 基于父分支。 它将更改与团队的其余部分隔离开来:
- 试验功能
- 轻松回滚更改
- 将更改与父分支合并
注意
对“feature”的引用与功能工作项类型 无关 。 此策略可以与史诗、功能、程序积压工作项、用户故事或任何在流程中定义的工作项类型一起使用。
通常为每个功能或 bug 创建一个功能分支,但在此策略中,可以创建一个杂项功能分支来隔离几个低风险特征。

与存储库范围的 Git 分支不同,TFVC 分支是路径范围的,因此不是轻量级分支。 若要解决此问题,请限制 TFVC 功能分支的数量和生存期,并使用显式、隐式、遮盖和非递归文件夹映射 优化工作区 ,以提高性能,并减少计算机上的所需磁盘空间。
提示
工作区应仅包含所需的文件。 请考虑创建多个工作区,以在多个功能分支之间隔离和切换。 为了避免自己感到困惑,请对工作区和功能分支使用一致的命名约定。
命名约定非常重要
对功能分支使用一致的命名约定。 分支应由用户自行描述和轻松标识。 一些建议:
- 个人执行的工作的功能/用户名/说明。 例如 ,features/sandra/sdk-java。
- 与特定工作项关联的功能工作的 features/workitem。 例如, 功能/115673。
- 特定冲刺中个人完成的工作的 sprint/username/description。 例如, S53/bill/dictionary-refactor。
- 特定于工程 bug 的工作的 bugfix/username/bugid。 例如, bugfix/takashi/707。
创建功能分支
在需要处理功能时创建功能分支,通常位于冲刺或迭代的上下文中。
若要保护父分支并最大程度地减少合并冲突,请定期将 (FI) 更改从父分支转发到功能分支。 它可确保解决功能分支上的合并冲突,而不是父分支。

此策略还使功能无法与父分支保持同步。 在反向集成 (RI 之前,请记住 FI) 更改回到父分支!
提示
使功能分支 生存期较短!
与主分支或其他中心分支不同,功能分支的生存期有限。 它们的范围限定为功能、bug 和热修复,通常在冲刺或迭代中开发。 考虑在功能满足团队完成 DoD 的定义后删除功能分支,并将更改与父分支合并。
随着功能分支的数量增加,存储要求和分支层次结构可视化噪音的增加。 只有五个特征分支,图表已经干扰,并迅速失去其监视质量。 你能想象团队创建数百个功能分支的影响吗?

同样,随着分支数的增加, 源代码管理资源管理器 视图变得干扰和不切实际。 除非具有一致的命名约定,否则在数百个功能分支中查找特定功能分支具有挑战性。

提示
完成后,请删除功能分支!
删除功能分支的影响
通过 删除 功能分支,可以最大程度地减少干扰并专注于活动功能开发。

请记住,这是软删除,历史记录不会丢失。 已删除的分支可以取消隐藏:
- Visual Studio Team Foundation Server选择“工具>选项>”。
- 在子菜单中,选择 “在源代码管理资源管理器中显示已删除的项目 ”以查看已删除的分支 (es) 。
如果需要,还可以 还原 已删除的分支和关联的项。

如果你的团队中没有人使用 destroy 命令销毁分支,你将拥有依赖于重播历史记录的审核和迁移工具所需的完整历史记录。
注意
请谨慎使用 destroy 命令。 这是 永久 删除!
通过使分支 生存期较短 并采用 一致的命名约定,功能隔离策略对小型和大型团队有效。
使用功能隔离后,应探索持续集成、功能切换和其他互补策略。
参考信息
作者:威利·肖布|查找本文的来源并连接到 ALM |在此处DevOps游侠
(c) 2017 Microsoft Corporation。 保留所有权利。 本文档提供“原样”。本文档中表达的信息和视图(包括 URL 和其他 Internet 网站引用)可能会更改,而无需通知。 您自行承担其使用风险。
本文档未向您提供任何 Microsoft 产品中任何知识产权的任何合法权利。 可以复制本文档并将其用于进行内部参考。