@mritd
2017-09-05T04:59:42.000000Z
字数 3025
阅读 1740
CI/CD
由于 git 代码管理比较混乱,所以记录一下 Git Flow + GitLab 的整体工作流程
Git Flow 定义了一个围绕项目开发发布的严格 git 分支模型,用于管理多人协作的大型项目中实现高效的协作开发;Git Flow 分支模型最早起源于 Vincent Driessen 的 A successful Git branching model 文章;随着时间发展,Git Flow 大致分为三种:
关于三种 Git Flow 区别详情可参考 Git 工作流程
Github Flow 和 GitLab Flow 对于持续发布支持比较好,但是原始版本的 Git Flow 对于传统的按照版本发布更加友好一些,所以以下主要说明以下 Git Flow 的工作流程;Git Flow 主要分支模型如下
在整个分支模型中 存在两个长期分支: develop 和 master,其中 develop 分支为开发分支,master 为生产分支;master 代码始终保持随时可以部署到线上的状态;develop 分支用于合并最新提交的功能性代码;具体的分支定义如下
feature/xxxx
形式命名分支hotfixes/xxxx
形式命名的分支release/xxxx
分支在整个分支模型中,develop 分支为最上游分支,会不断有新的 feature 合并入 develop 分支,当功能开发达到完成所有版本需求时,则从 develop 分支创建 release 分支,release 后如没有发现其他问题,最终 release 会被合并到 master 分支以完成线上部署
针对于 Git Flow,其手动操作 git 命令可能过于繁琐,所以后来有了 git-flow 工具;git-flow 是一个 git 扩展集,按 Vincent Driessen 的分支模型提供高层次的库操作;使用 git-flow 工具可以以更加简单的命令完成对 Vincent Driessen 分支模型的实践;
git-flow 安装以及使用具体请参考 git-flow 备忘清单,该文章详细描述了 git-flow 工具的使用方式
还有另一个工具是 git-extras,该工具没有 git-flow 那么简单化,不过其提供更加强大的命令支持
在整个 Git Flow 中,commit message 也是必不可少的一部分;一个良好且统一的 commit message 有助于代码审计以及 review 等;目前使用最广泛的写法是 Angular 社区规范,该规范大中 commit message 格式大致如下:
<type>(<scope>): <subject>
<BLANK LINE>
<body>
<BLANK LINE>
<footer>
总体格式大致分为 3 部分,首行主要 3 个组成部分:
$browser, $compile, $rootScope, ngHref, ngClick, ngView, etc...
关于 type 提交类型,有如下几种值:
中间的 body 部分是对本次提交的详细描述信息,底部的 footer 部分一般分为两种情况:
BREAKING CHANGE:
开头,后面跟上不兼容变动的具体描述和解决办法Close #9527,#9528
不过 footer 部分也有特殊情况,如回滚某次提交,则以 revert:
开头,后面紧跟 commit 信息和具体描述;还有时某些 commit 只是解决了 某个 issue 的一部分问题,这是可以使用 refs ISSUE
的方式来引用该 issue
针对 Git 的 commit message 目前已经有了成熟的生成工具,比较有名的为 commitizen-cli 工具,其采用 node.js 编写,执行 git cz
命令能够自动生成符合 Angular 社区规范的 commit message;不过由于其使用 node.js 编写,所以安装前需要安装 node.js,因此可能不适合其他非 node.js 的项目使用;这里推荐一个基于 shell 编写的 Git-toolkit,安装此工具后执行 git ci
命令进行提交将会产生交互式生成 Angular git commit message 格式的提交说明,截图如下:
以上 Git Flow 所有操作介绍的都是在本地操作,而正常我们在工作中都是基于 GitLab 搭建私有 Git 仓库来进行协同开发的,以下简述以下 Git Flow 配合 GitLab 的流程
当开发一个新功能时流程如下:
git flow feature start xxxx
开启一个 feature 新分支git flow feature publish xxxx
将此分支推送到远端以便他人获取develop
分支发起合并请求master
权限用户合并其到 develop
分支当一定量的 feature 开发完成并合并到 develop 后,如所有 feature 都测试通过并满足版本需求,则可以创建 release 版本分支;release 分支流程如下
git flow release start xxxx
开启 release 分支git flow release publish xxxx
将其推送到远端以便他人获取当 master 某个 tag 部署到生产环境后,也可能出现不符合预期的问题出现;此时应该基于 master 创建 hotfix 分支进行修复,流程如下
git flow hotfix start xxxx
创建紧急修复分支