Git版本分支管理规范

1、存在的问题

目前大部分项目都简单的以开发者姓名或功能名作为分支名,这种方式存在以下问题:

  • 用开发者名字命名分支,多人开发多个功能时,出现混乱。

  • 只有开发者知道哪几个分支是当前版本要发版的分支,可能会出现功能漏发或提前发的问题。

  • 多个功能代码在一个分支上,无法应对突发的功能分开发版需求。

为了解决这些问题,我们制定了以下版本分支规范。

2、版本分支规范

2.1、分支规范

  • 把分支分为三类:master,dev和version。

  • master分支为线上版本分支,与生产环境代码一致。

  • dev分支为开发分支,对应开发环境,不能在dev分支上开发,只能其他分支合并到dev。

  • 版本分支的格式为“版本号/名称”,每个版本都有一个主分支,为“版本号/main”,对应版本提测的测试环境,其他版本分支用于单独功能开发。

2.2、创建合并规范

  • 所有分支都从master分支基础上创建,有依赖关系的分支例外。

  • 版本功能分支开发完要发到开发环境时,除了要合并到dev分支,同时也要合并到版本主分支。

  • 版本发布时,把版本的主分支合并到master分支。

  • Bug修复时,在对应的版本上创建修复分支,之后走正常版本合并发布操作。

2.3、版本升级步骤

每个版本统一提供一个升级步骤文档(doc/update.md),细化每个升级步骤,开发过程中填写详细内容,防止升级时漏了配置或sql之类的问题。

3、自动化脚本

以上规范会存在一些人为错误,如:

  • 合并完dev后在dev分支上修复问题或开发新功能,导致代码只存在开发环境,不会发到生产环境。

  • 代码合并到dev后忘记合并到版本主分支,导致最终没发到生产环境。

为了防止此类问题的发生,提供合并脚本,完成错误检测和自动化操作。

Windows下执行sh脚本必须在git-bash.exe下执行。

脚本Git地址:http://192.168.16.200:3002/yeshaowei/autosh.git

3.1、后端脚本

脚本:后端/version.sh

功能:

  • new:创建新的版本功能分支,会自动检测是否已经创建版本主分支,如没有会自动创建。
  • merge:默认功能,先合并master分支到当前功能分支,合并当前功能分支到dev和版本主分支,如出现合并冲突,脚本会等待冲突解决后继续执行流程。
  • check:检测master和当前版本的分支是否都合并到主分支
  • publish:发布版本,把版本主分支合并到master分支,合并前会检测是否有漏合版本功能分支,发版后自动打上版本tag。
  • fix:根据master对应版本,创建一个版本的修复分支,修复线上版本Bug。
  • move:可以把一个功能分支自动迁移到另一个版本,同时重建版本主分支,防止当前版本中包含此分支代码。

3.2、前端脚本

脚本:前端/version.sh

功能:

  • new:创建新的版本功能分支,会自动检测是否已经创建版本主分支,如没有会自动创建。
  • merge:默认功能,先合并master分支到当前功能分支,再合并当前功能分支到版本主分支,如出现合并冲突,脚本会等待冲突解决后继续执行流程。
  • check:检测master和当前版本的分支是否都合并到主分支
  • build:打包程序,检测是否有漏合版本功能分支,打包后自动打上版本tag。
  • publish:发布版本,把版本主分支合并到master分支,合并前会检测是否有漏合版本功能分支,发版后自动打上版本tag。
  • fix:根据master对应版本,创建一个版本的修复分支,修复线上版本Bug。
  • move:可以把一个功能分支自动迁移到另一个版本,同时重建版本主分支,防止当前版本中包含此分支代码。

4、SourceTree菜单操作

如每次都要手动敲脚本,还是不太方便,SourceTree正好提供“自定义操作”功能,把脚本配置在“自定义操作”中,直接可以右键菜单操作,方便快捷。

4.1 添加自定义操作

1.png

2.png

3.png

根据不同的功能添加各自的操作

4.1.1、创建新功能分支

参数:D:/autosh/version.sh -o new

说明:脚本在执行过程中会要求输入版本号和功能名。

4.1.2、合并功能代码到dev

参数:D:/autosh/version.sh -o merge

说明:脚本会根据当前分支自动解析出版本号,合并代码到dev分支和版本主分支。

4.1.3、检测当前版本的分支是否都合并到主分支

参数:D:/autosh/version.sh -o check

说明:检测master和当前版本的分支是否都合并到主分支

4.1.4、前端版本主分支打包

参数:D:/autosh/version.sh -o build

说明:脚本会根据当前分支自动解析出版本号,切换到版本主分支,等待打包完成。

4.1.5、发布版本

参数:D:/autosh/version.sh -o publish

说明:脚本在执行过程中会要求输入版本号,也可增加参数(-v 1.2.3)指定版本。

4.1.6、修复线上Bug

参数:D:/autosh/version.sh -o fix

说明:脚本会根据master自动生成对应版本的功能分支,执行过程中要求输入功能名。

4.1.7、分支迁移

参数:D:/autosh/version.sh -o move

说明:脚本会把当前分析迁移到新版本分支,执行过程中要求输入新版本号,同时删除原版本的主分支。

4.2、右键菜单操作调用脚本

4.png