本文主要介绍AGit-Flow阿里巴巴集中式工作流进行代码管理与规范性约束。
设想一下:
能否一键完成代码评审,就像执行
git push
命令一样的简单?开发者无需切换工具,将繁琐几分钟的代码评审流程,瞬间缩短至几秒,是不是很高效?
采用AGit-Flow模式,借助 git-repo工具,为Git加速让代码评审更加省时与规范。
什么是 AGit-Flow ?
AGit-Flow是一种结合了 GitHub和Gerrit优势的集中式Git工作流。通过这种方式,开发者可以享受GitHub的易用性和广泛的生态系统,同时利用Gerrit的强大代码审查功能我们称之为 “AGit-Flow”。
使用AGit-Flow工作流,无需创建派生仓库,也无需在仓库中创建特性分支,只读用户就可以通过git push
命令创建代码评审。
为此,我们开发了配套的命令行工具 “git-repo”,既能在单仓库下工作,又支持类似Android的多仓库项目协同。
AGit-Flow 工作流
单仓库下AGit-Flow工作流如下图所示:
图示的工作流原理如下:
Developer
开发者通过如下操作,创建和更新pull request:
开发者克隆仓库。
本地仓库内开发,创建提交。
工作区中执行
git pr
命令,推送本地提交到服务器。服务器自动创建新的代码评审(例如:pull request #123)。
开发者根据评审意见,在本地工作区继续开发,新增或修改提交。
工作区中再次执行
git pr
命令,推送本地提交到服务器。服务器发现目标分支上已经存在来自同一用户、同一本地分支的pull request,因此用户此次推送没有创建新的pull request,而是更新已经存在的pull request。
Committer
代码评审者,不但可以给出评审意见,也可以直接发起对评审代码的修改,更新pull request:
代码评审者执行
git download 123
下载编号为 123 的pull request到本地仓库。代码评审者本地修改代码后,执行
git pr --change 123
命令,将本地修改推送到服务端。服务端接收到代码评审者的特殊
git push
命令,更新之前由开发者创建的pull request。项目管理者通过点击pull request评审界面的合并按钮,将pull request合入master分支。master分支被更新,同时关闭pull request。
下面是单仓库下AGit-Flow工作流的演示:
多仓库协同演示参见:https://git-repo.info/zh_cn/docs/multi-repos/overview/
git-repo 工具
git-repo是阿里巴巴开源的一款命令行工具,对原生Git命令做了封装,简化了使用AGit-Flow等集中式工作流时稍嫌繁琐的Git命令。
git-repo可以支持AGit-Flow兼容的代码平台以及Gerrit,下载参见工具下载。