AGit-Flow 阿里巴巴集中式 Git 工作流

本文主要介绍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:

  1. 开发者克隆仓库。

  2. 本地仓库内开发,创建提交。

  3. 工作区中执行 git pr 命令,推送本地提交到服务器。

  4. 服务器自动创建新的代码评审(例如:pull request #123)。

  5. 开发者根据评审意见,在本地工作区继续开发,新增或修改提交。

  6. 工作区中再次执行 git pr 命令,推送本地提交到服务器。

  7. 服务器发现目标分支上已经存在来自同一用户、同一本地分支的pull request,因此用户此次推送没有创建新的pull request,而是更新已经存在的pull request。

Committer

代码评审者,不但可以给出评审意见,也可以直接发起对评审代码的修改,更新pull request:

  1. 代码评审者执行 git download 123 下载编号为 123 的pull request到本地仓库。

  2. 代码评审者本地修改代码后,执行 git pr --change 123 命令,将本地修改推送到服务端。

  3. 服务端接收到代码评审者的特殊 git push 命令,更新之前由开发者创建的pull request。

  4. 项目管理者通过点击pull request评审界面的合并按钮,将pull request合入master分支。master分支被更新,同时关闭pull request。

下面是单仓库下AGit-Flow工作流的演示:

git-repo-single

多仓库协同演示参见:https://git-repo.info/zh_cn/docs/multi-repos/overview/

git-repo 工具

git-repo是阿里巴巴开源的一款命令行工具,对原生Git命令做了封装,简化了使用AGit-Flow等集中式工作流时稍嫌繁琐的Git命令。

git-repo可以支持AGit-Flow兼容的代码平台以及Gerrit,下载参见工具下载