前情提要
我所在的项目组的项目以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