该如何管理开发过程中的Git代码分支

1,594 阅读6分钟

背景

git代码分支管理是devops的一个重要组成部分。而现状是,各个业务线没有统一的代码分支管理规范,这样会降低研发效率和增加线上代码的风险。所以需要一个统一的代码管理以及配套的产物环境管理。

方案原则:

  1. 尽量减少分支数量,降低分支管理成本,减少代码分支操作的失误。

  2. 要满足日常开发的易操作性和灵活度。

  3. 充分利用CICD的自动化管理代码分支功能,提升代码管理的效率,减少手动处理的出错率。

  4. 项目之间的开发和部署类型有比较大的差异,需要区别对待。

分支定义

分支解释分支名称
开发分支开发分支。一个需求对应1个或多个 feature,每一个 feature 会对应一个分支。dev_{base_version}_{feature1}base_version:从哪个 master 版本创建的。feature: 能够识别功能内容的简短说明。
开发联调分支开发联调分支。只要涉及开发联调的 feature 分支都可以合并到这个分支。支持一个或多个1. 如果一个开发联调环境就可以满足开发需求,那么就只需要一个分支,分支名称为:dev2. 如果需求多个开发联调环境,分支就需要多个:dev_{XXX}{XXX}:自定义来识别具体的开发联调分支。
版本分支test_{online_version}每次版本升级时,会对应一个版本分支如 dev_2.0 分支只能由属于 2.0 版本的 feature 分支合并进来。用于测试人员进行版本功能的测试。如果有多个版本并行开发和测试的场景。这里支持多个版本分支来支撑多个版本并行测试。test_{online_version}online_version:产品版本号。
发布分支主分支,不能直接commit,仅通过 版本分支向 master分支 merge 修改代码。master

环境定义

运行环境定义对应分支
dev(开发联调环境)给开发人员提供的开发联调环境, 支持一个或多个环境。开发联调分支
test(测试环境)给测试人员测试环境,支持一个或多个环境。test_{online_version}
准生产环境(包括UAT,stage等环境)接近生产的环境,正式上线前最后一次测试。master 分支
poduce(生产环境)生产环境的环境master 分支

版本号规范:

产品版本,技术版本。关联关系。

分支与环境管理流程

根据公司日常开发和部署环境的不同,主要分为公有云,国际化,私有化。

公有云分支管理主流程

第一步, 首先对基于 master 分支创建开发联调分支 (dev或dev_{XXX}),开发联调分支需要尽量保证版本不落后与 master 分支。

第二步, 确认3.0版本需求后,从 master 2.0 拉出 version_3.0 分支, 这个分支用于3.0版本的测试。

第三步,从version_3.0 分支拉出两个 feature 分支,分别为 feature_2.0_01 和 feature_2.0_02。

第四步,当代码编写完成后,feature_2.0_01 分支和 feature_2.0_02 分支分别合并到 开发联调分支, 在 开发联调环境进行开发环境的联调。

第五步,开发联调结束后,feature_2.0_01 分支和 feature_2.0_02 分支分别合并到 version_3.0 分支.

第六步,并把version_3.0 分支 部署在 test 环境,测试人员进行测试。

第七步,测试通过后,把 version_3.0 分支合并到 master 分支。

第八步,把 master 分支代码部署在准生产环境。

第九步, 准生产环境测试没有问题,就把 master 分支部署在生产环境。如果准生产环境有问题重新通过 feature 分支再按上述步骤再走一遍。

如果在发布过程中有别的版本分支合并到 master 分支,会造成代码冲突,这种情况怎么解决呢?

方法是:如果一个版本分支在发布阶段,禁止其它版本分支合并master分支。

公有云线上 bug 分支管理流程

线上的bug 分为非常紧急的 hotfix 和不是很紧急常规线上 bug。

Hotfix 场景的分支管理流程

  1. 对于 hotfix 的场景,需要从 master 分支拉一个当前生产环境的代码。命名规范是按日期和时间命名的,如 hotfix_2023-01-02-13, 代表2023年1月2号13点拉的分支。

  2. 在这个分支上提交代码,然后合并到 master 然后把 master 分支代码发布到生产环境。

  3. 生产环境验证没问题就在 master 分支 打一个 1.1 的 tag。

  4. 如果这时候有正常的版本迭代行为, 那么就在版本分支需要及时把 master 分支合并到版本分支上。

常规线上 bug 的分支管理流程

对于这种情况,就直接把这个fix bug 的需求作为下一个版本迭代里的一个feature 就可以了。后面的流程和主流程都是一样的了。

多版本并行开发的管理流程

总结

按照项目开发的流程,给大家再梳理一下分支名,环境以及对应的研发行为。

阶段涉及的分支名环境研发行为
开发dev_{base_version}_{featrure01}没有1. 研发经理从 master 拉取版本测试分支。
  1. 开发人员从版本测试分支拉取自己的 feature 分支。

  2. 开发人员在 feature 分支 上开发。 | | 联调 | 联调分支:1. dev_common2. dev_common_{XXX} | 开发联调环境 | 1. 如果联调分支落后于 master 分支就把 master 分支合并到联调分支。

  3. 合并后的联调分支重新编译部署在开发联调环境中。

  4. 开发人员把某个 feature 分支合并到联调分支。

  5. 开发人员在开发联调环境验证代码功能。 | | 提测 | dev_{online_version} | test 测试环境 | 1. 研发经理把 feature 分支到版本测试分支。

  6. 研发经理把版本测试分支发布到 test 环境

  7. 测试人员在 test 环境进行测试。 | | 准上线 | master | 准生产环境 | 1. 研发经理把提测分支 dev_{online_version}合并到 master 分支。

  8. 研发经理把合并后的 master 分支打上 tag。

  9. 研发经理把 master 分支代码的tag版本发布到准生产环境。

  10. 测试人员测试准生产环境。 | | 上线后 | master | produce 生产环境 | 1. 研发经理把 master 分支代码发到 produce 生产环境。 |

私有化分支管理主流程

基于公有云的master分支,创建国际化和私有化的 master 分支。

当私有化项目代码有升级的需求时,这时需要把 master 分支合并到私有化分支或国际化分支。

私有化项目和国际项目得到相应的 master 分支后其它的分支,环境,流程和公有云一样。

  • 为每一个需要私有化的客户创建一个私有分支,这个私有分支就相当于私有化的master。其它的逻辑和 公有云分支管理是一样的。命名规则为 master_客户。如 mater_beiyin(代表 北银的私有化 master 分支)。
  • 为国际化项目创建一个 master_international 的分支。