前情提要
我所在的项目组的项目以git flow为主,在长时间的实践中,发现git flow规则逻辑较为复杂,不能够很好地适应项目的快速迭代,且维护和管理较为麻烦。因此为了改善项目组的工作流程,,我在学习了github flow、gitlab flow等其他一些优秀的workflow之后,在尝试中摸索出了自己的workflow方法,在这里和大家分享一下。
参考
-
介绍git flow、github flow以及gitlab flow 阮一峰的git workflow文章
-
介绍该项目组自己的workflow 饿了么的github flow文章
流程特点
这个的workflow需要适应当前项目的如下要求:
- 快速的版本迭代
- 方便稳定的代码部署以及发布
- 更好的错误溯源、更少的系统性流程错误
- 清晰的code review
实践方法
一下流程在gitlab上演示
- 首先,在项目组的
group里新建一个仓库,假设我们的项目组叫front-end-team。我们仓库取名为test-project。我们称呼group中的test-project仓库为主仓库。主仓库有master和develop两个分支。
- 我们平时的开发,拉取
develop分支,新建feature分支,开发完成后合并到master分支,如有bug问题则在master分支的基础上上新建hotfix分支,修复后试具体情况合并master和develop。
- 在gitlab中将主仓库fork到个人仓库
- Fork 出来的仓库完全属于你自己,你可以任意修改该仓库的代码及配置,但是除非你向项目主仓库提交 pull request,并且被接受通过,你才可以将你fork 仓库修改的代码合并到主仓库,否则不会对主仓库产生任何影响。
- 一般来讲,
pull代码,需要从主仓库拉取最新的代码;push的话,则只能严格推送到个人的子仓库。这里需要在gitlab中做好权限的分配。
- clone个人仓库到本地,并且在remote配置中upstream
upstream指向远程主仓库地址origin指向远程个人仓库地址
git remote add upstream <主仓库地址>
# 执行 git remote -v 可以看到 remote 中有 origin 和 upstream
git remote -v
- 保持个人仓库和
upstream同步
- 这里需要注意,建议每天开发工作开始前,将
upstream的代码更新到本地
# 同步upstream到本地
git fetch upstream
git checkout master
git merge upstream/master # 这里一般可以不用--no-ff
# 本地与远程个人仓库同步
git pull origin master
- 开始一个新功能的开发或一个新bug的修复
- 开发新功能
develop上新建feature/new-feature临时 分支- bug修复
master上新建hotfix/new-bug临时 分支
# 新功能
git checkout -b feature/new-feature develop
# 新bug
git checkout -b hotfix/new-bug master
- 开发完成后提交到个人远程仓库前,同步
upstream
> - 开发完成后,提交代码前,检查本地feature分支是否落后于upstream的develop分支(在你提交代码前,可能有其他的PR合并到了upstream的develop分支)
```bash
git checkout develop
git pull upstream develop
# 检查
git log feature/new-feature..develop
# 假设控制台有输出(如下),说明本地feature分支落后于upstream的develop分支
commit 58fae9f9355a820da713e830b0b4c8100bcb6dab (upstream/develop, develop)
Author: xxx <xxx@xxx.com>
Date: Sun Sep 27 15:13:42 2020 +0800
```
> - 如果落后了,则进行以下操作
```bash
git checkout feature/new-feature
# 第一种使用rebase 更方便但是更加危险❗
git rebase develop
# 第二种使用merge 更多的操作空间(--no-ff指禁止fast forward)
git merge develop --no-ff --edit
```
> - 之后就可以提交到远程个人仓库分支啦💪
```bash
git push origin HEAD
# 或者
git push origin feature/new-feature
```
-
发起
pull request或merge request> - github 👉 pull request > - gitlab 👉 merge request > 1. 在gitlab的个人仓库页面的左边菜单点击merge request(👋记住是个人仓库)> 1. 点击绿色按钮
new merge request> 1. 左边的
Source branch选择feature/new-feature分支 > 1. 右边的Target branch选择主仓库的develop分支 (👋记住是主仓库)> 1. 之后点击assignee选择你的名字
> 1. 点击发布你的
PR -
修改并提交
PR> - 你的PR发布后,别人可以通过check out branch按钮查看并修改你的PR。你自己也可以在本地修改并提交到相应的feature分支。 > - 当问题都解决了之后,你便可以点击merge按钮进行提交啦~~ -
最后,合并
upstream到origin仓库 > - 以上步骤介绍了具体的同步和merge方法 > -merge request后origin上已经没有feature分支了, 但是本地依然存在feature分支。这个时候只要执行以下命令即可修剪本地多余的分支bash git remote prune origin