想像一下:
能否让创建代码评审就像执行
git push
命令一样的简单?开发者不用切换工具,将原来需要几分钟才能完成的创建代码评审的时间,缩短到几秒钟,是不是很酷?
采用 AGit-Flow 模式,借助 git-repo工具,它为 Git 插上了翅膀。
什么是 AGit-Flow ?
如何将 GitHub 和 Gerrit 两种工作流结合到一起并且兼具他们的优点?在 Gerrit 的启发下,我们在 CGit 的基础上创建了一个集中式 Git 工作流,我们称之为 “AGit-Flow”。
使用 AGit-Flow 工作流,无需创建派生仓库,也无需在仓库中创建特性分支,只读用户就可以通过git push
命令创建代码评审。
为此,我们开发了配套的命令行工具 “git-repo”,既能在单仓库下工作,又支持类似 Android 的多仓库项目协同。
AGit-Flow 工作流
单仓库下 AGit-Flow 工作流如下图所示:
图中的两个角色,一个是开发者,另外一个是评审者。
开发者通过如下操作,创建和更新 pull request:
开发者克隆仓库。
本地仓库内开发,创建提交。
工作区中执行
git pr
命令,推送本地提交到服务器。服务器自动创建新的代码评审(例如:pull request #123)。
开发者根据评审意见,在本地工作区继续开发,新增或修改提交。
工作区中再次执行
git pr
命令,推送本地提交到服务器。服务器发现目标分支上已经存在来自同一用户、同一本地分支的 pull request,因此用户此次推送没有创建新的 pull request,而是更新已经存在的 pull request。
代码评审者,不但可以给出评审意见,也可以直接发起对评审代码的修改,更新 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,下载参见工具下载。