热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

版本控制与分支管理策略

本文介绍了一家大型电信公司在SOA/BPM基础设施项目中采用的版本控制和分支管理策略。自项目启动以来,团队通过定义详细的命名约定、测试流程和分支规则,确保了项目的顺利进行并成功投入生产。
在一家大型电信公司,我们两年前启动了一个与SOA/BPM基础设施相关的项目。自去年夏天以来,项目进展顺利,并已成功投入生产。随着模块数量的增加,现在需要将知识转移给客户的开发人员,特别是关于命名约定、源代码、体系结构和管理任务。

为了帮助客户开发人员理解我们的工作方式,首先需要向他们解释我们的版本控制分支策略。这一策略是在经过深入讨论和研究后制定的。

### 项目背景
- 我们有许多相互关联的应用程序。
- 每个应用程序至少依赖于其他应用程序(基于WSDL)。
- 团队没有专门的质量保证经理或发布经理,因此我们负责设计、开发、发布管理和日常管理任务。
- 定义了三种主要的测试类型:单元测试、集成测试和验收测试。

### 分支策略规则
1. **主线不稳定**:主线包含最新的代码,但不一定稳定。
2. **分支用途**:分支仅用于发布候选版本、正式发布、错误修复和实验代码。
3. **标签命名规范**:
- 分支标签以“BT_”开头。
- 发布候选前缀为“RC_”。
- 正式发布前缀为“R_”。
- 错误修复前缀为“BF_”。
- 实验代码前缀为“EC_”。
- 开发人员代码以“DEV_”开头。
- 分支名称始终以“BR_”开头。
4. **标签创建**:
- 创建分支之前,在主干上创建一个带有“_BASE”的标签。
- 在合并分支到主干之前,创建带有“_PMB”的标签。
- 合并后,在主干上创建带有“_AMB”的标签。
5. **计数器使用**:完成工作后,在分支中添加带有“-counter”的标签,并递增计数器。
6. **频繁合并**:尽量频繁地将更改合并回主干,以减少冲突。
7. **文档记录**:为每个应用程序创建Wiki页面,并详细记录每个标签和分支。
8. **问题跟踪**:将标签记录在问题跟踪系统中。

### 示例发布管理流程
假设我们要发布版本2.0的应用程序PName。
1. 所有开发都在TRUNC上进行,当前稳定版本为1.9。经过大量更改后,准备发布2.0。
2. 开发人员完成单元测试和部分集成测试后,创建名为“RC_2_0_PName_BASE”的标签。
3. 使用名称“BR_RC2_0_PName”创建发布候选分支。
4. 集成测试期间发现问题,修复后标记为“BT_RC2_0–1_PName”。
5. 将修复合并回TRUNC,并暂停其他开发团队的提交。
6. 创建名为“RC2_0–1_PName_PMB”的标签,然后合并到TRUNC。
7. 提交必要的更改,并创建名为“RC2_0–1_PName_AMB”的标签,取消提交暂停。
8. 验收测试期间再次发现问题,修复后标记为“BT_RC2_0–2_PName”。
9. 继续修复并标记为“BT_RC2_0–3_PName”,最终验收测试通过。
10. 创建名为“BT_R2_0_PName”的标签,表示版本2.0准备好发布。
11. 将代码合并回TRUNC,创建名为“R2_0_PName_PMB”的标签,再合并到主干。
12. 创建名为“R2_0_PName_AMB”的标签,取消提交暂停。
13. 生产环境中出现问题时,快速修复并标记为“BT_RC2_0_1_PName”,同时创建正式发布标签“BT_R2_0_1_PName”。
14. 将快速修复合并回TRUNC,并继续朝下一个版本RC3_0努力。

通过遵循这些规则,我们可以轻松返回到任何版本,并进行必要的修复和改进。虽然这个过程可能不是最优雅的,但它适用于我们小型开发团队的需求。
推荐阅读
  • 本文介绍了如何利用 Spring Boot 和 Groovy 构建一个灵活且可扩展的动态计算引擎,以满足钱包应用中类似余额宝功能的推广需求。我们将探讨不同的设计方案,并最终选择最适合的技术栈来实现这一目标。 ... [详细]
  • 基于JQuery实现的评分插件
    本文介绍了一个使用JQuery创建的交互式评分控件。当用户将鼠标悬停在星星上时,左侧的星星会变为实心,右侧保持空心,并显示对应的评分等级;移开鼠标后,所有星星恢复为空心状态。 ... [详细]
  • 本文将探讨Java编程语言中对象和类的核心概念,帮助读者更好地理解和应用面向对象编程的思想。通过实际例子和代码演示,我们将揭示如何在Java中定义、创建和使用对象。 ... [详细]
  • 雨林木风 GHOST XP SP3 经典珍藏版 V2017.11
    雨林木风 GHOST XP SP3 经典珍藏版 V2017.11 ... [详细]
  • 本文探讨了在Git子模块目录中运行pre-commit时遇到的错误,并提供了一种通过Docker环境解决此问题的方法。 ... [详细]
  • This pull request aims to optimize the npm install retry time in branch 0.7, reducing delays caused by long timeouts when no network connection is available. ... [详细]
  • 在现代Web应用中,当用户滚动到页面底部时,自动加载更多内容的功能变得越来越普遍。这种无刷新加载技术不仅提升了用户体验,还优化了页面性能。本文将探讨如何实现这一功能,并介绍一些实际应用案例。 ... [详细]
  • 解决Python中 'NoneType' 对象无属性 'find_all' 错误
    本文详细探讨了在Python编程中遇到的常见错误——'NoneType'对象没有属性'find_all',并深入分析其原因及解决方案。通过理解find_all函数的工作原理和常见用法,帮助读者避免类似问题。 ... [详细]
  • 给定行数 numRows,生成帕斯卡三角形的前 numRows 行。例如,当 numRows 为 5 时,返回的结果应为:[[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1]]。 ... [详细]
  • 解决SVN图标显示异常问题的综合指南
    本文详细探讨了SVN图标无法正常显示的问题,并提供了多种有效的解决方案,涵盖不同环境下的具体操作步骤。通过本文,您将了解如何排查和修复这些常见的SVN图标显示故障。 ... [详细]
  • 探讨在 JavaScript 中使用不同方向的 for 循环来实现跟随鼠标的 div 动画时,为什么会出现不同的视觉效果。 ... [详细]
  • JavaScript 基础语法指南
    本文详细介绍了 JavaScript 的基础语法,包括变量、数据类型、运算符、语句和函数等内容,旨在为初学者提供全面的入门指导。 ... [详细]
  • 本文介绍如何使用 Android 的 Canvas 和 View 组件创建一个简单的绘图板应用程序,支持触摸绘画和保存图片功能。 ... [详细]
  • Python 内存管理机制详解
    本文深入探讨了Python的内存管理机制,涵盖了垃圾回收、引用计数和内存池机制。通过具体示例和专业解释,帮助读者理解Python如何高效地管理和释放内存资源。 ... [详细]
  • Appium + Java 自动化测试中处理页面空白区域点击问题
    在进行移动应用自动化测试时,有时会遇到某些页面没有返回按钮,只能通过点击空白区域返回的情况。本文将探讨如何在Appium + Java环境中有效解决此类问题,并提供详细的解决方案。 ... [详细]
author-avatar
pigone
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有