一、 概述
本文记述了服务器端开发过程中代版本控制的分支管理策略,以及使用该分支策略结合Git、GitLab、Jenkins等工具完成自动代码静态分析、代码审查、自动构建等的工作流。
二、 分支管理策略
如图1所示,流程中主要包括master分支、develop分支、feature分支和hotfix分支等四种分支。每种分支的详细说明如下:
图1 分支构成
1、master分支
版本库中有且只有一个master分支,它是版本库初始化以后自动建立的。master分支永远保持线上的稳定版本,禁止在master上开发。当develop分支测试通过达到一个可以发布上线的状态后,需要把develop分支合并到master分支,然后触发钩子脚本自动进行构建、打包。
2、develop分支
版本库中有且只有一个develop分支,它是基于master分支的初始版本建立的。开发功能时,需要基于该分支创建功能(feature)分支,在功能分支开发、调试完成后,如果安排上线则需要将该功能分支合并到develop分支,进行测试。测试人员只基于develop分支进行测试,测试过程的bug的修改需要基于develop分支创建功能分支,bug修改完成、自测后合并到develop分支。开发人员只能在develop进行bug的修改,禁止功能的开发1。当develop分支达到可以发布上线的状态后,需要将develop分支合并到master分支上。具体的操作命令如下:
(1) 创建develop分支命令
git checkout –b develop master
(2) 将develop分支合并到master分支命令
# 切换到master分支
git checkout master
# 对develop分支进行合并
git merge --no-off develop
关于合并操作中的--no-off参数,默认情况下Git执行"快进式合并"(fast-forward merge),会直接将master分支指向develop分支(如图2所示)。使用--no-ff参数后,会执行正常合并,在master分支上生成一个新节点(如图3所示)。为了保证版本演进的清晰,希望采用这种做法。
图2 默认合并
图3--no-off合并
3、feature分支
feature分支即功能分支,作为临时性分支存在。它是为了开发某个特定功能或者修改测试中发现的bug时,基于develop创建的,开发、调试完成后,再合并回develop分支,进行测试。合并后,需要删除该功能分支。功能分支的名字,可以采用feature-xxx的形式命名。具体的操作命令如下:
(1) 创建一个功能分支feature-x
git checkout –b feature-x develop
(2) 开发完成后,将功能分支合并回develop分支
# 切换回develop分支
git checkout develop
# 合并feature-x分支
git merge --no-off feature-x
(3) 删除该功能分支
git branch –d feature-x
4、hotfix分支
hotfix分支即修补bug分支,同样作为临时性分支存在。软件发布上线后,难免会出现bug。这时就需要创建一个hotfix分支,进行bug的修补。hotfix分支是基于master分支创建的,修补、测试完成后,再合并回master和develop分支。hotfix分支的名字可以采用hotfix-xxx的形式命名。关于该分支的具体的操作命令如下:
(1) 创建一个hotfix分支
git checkout –b hotfix-x master
(2) 修补结束后,合并回master分支
# 切换回master分支
git checkout master
# 合并hotfix-x分支
git merge --no-off hotfix-x
(3) 再合并回develop分支
# 切换回develop分支
git checkout develop
# 合并hotfix-x分支
git merge --no-off hotfix-x
(4) 删除该hotfix分支
git branch -d hotfix-x
三、 工作流
功能开发、功能测试、生产环境问题修复三个场景的工作流分别如图4、图5、图6所示。
图4 功能开发工作流图
5 功能测试工作流
图6 生产环境问题修复
本文摘自:https://note.youdao.com/share/?id=f502cee0625b9dae2a05778fc5c0c75d&type=note#/