热门标签 | 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努力。

通过遵循这些规则,我们可以轻松返回到任何版本,并进行必要的修复和改进。虽然这个过程可能不是最优雅的,但它适用于我们小型开发团队的需求。
推荐阅读
  • Java 中的 BigDecimal pow()方法,示例 ... [详细]
  • 本文详细介绍了 BERT 模型中 Transformer 的 Attention 机制,包括其原理、实现代码以及在自然语言处理中的应用。通过结合多个权威资源,帮助读者全面理解这一关键技术。 ... [详细]
  • QUIC协议:快速UDP互联网连接
    QUIC(Quick UDP Internet Connections)是谷歌开发的一种旨在提高网络性能和安全性的传输层协议。它基于UDP,并结合了TLS级别的安全性,提供了更高效、更可靠的互联网通信方式。 ... [详细]
  • 本文介绍如何使用 Python 将一个字符串按照指定的行和元素分隔符进行两次拆分,最终将字符串转换为矩阵形式。通过两种不同的方法实现这一功能:一种是使用循环与 split() 方法,另一种是利用列表推导式。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • 本文总结了汇编语言中第五至第八章的关键知识点,涵盖间接寻址、指令格式、安全编程空间、逻辑运算指令及数据重复定义等内容。通过详细解析这些内容,帮助读者更好地理解和应用汇编语言的高级特性。 ... [详细]
  • 本文详细探讨了Java中的24种设计模式及其应用,并介绍了七大面向对象设计原则。通过创建型、结构型和行为型模式的分类,帮助开发者更好地理解和应用这些模式,提升代码质量和可维护性。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 本文介绍了如何使用JQuery实现省市二级联动和表单验证。首先,通过change事件监听用户选择的省份,并动态加载对应的城市列表。其次,详细讲解了使用Validation插件进行表单验证的方法,包括内置规则、自定义规则及实时验证功能。 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • 本文深入探讨了 Java 中的 Serializable 接口,解释了其实现机制、用途及注意事项,帮助开发者更好地理解和使用序列化功能。 ... [详细]
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社区 版权所有