一个基于gitlab flow的workflow简单实践

4,537 阅读4分钟

前情提要

我所在的项目组的项目以git flow为主,在长时间的实践中,发现git flow规则逻辑较为复杂,不能够很好地适应项目的快速迭代,且维护和管理较为麻烦。因此为了改善项目组的工作流程,,我在学习了github flowgitlab flow等其他一些优秀的workflow之后,在尝试中摸索出了自己的workflow方法,在这里和大家分享一下。

参考

流程特点

这个的workflow需要适应当前项目的如下要求:

  1. 快速的版本迭代
  2. 方便稳定的代码部署以及发布
  3. 更好的错误溯源、更少的系统性流程错误
  4. 清晰的code review

实践方法

一下流程在gitlab上演示

group

  1. 首先,在项目组的 group 里新建一个仓库,假设我们的项目组叫 front-end-team 。我们仓库取名为 test-project 。我们称呼 group 中的 test-project 仓库为主仓库。主仓库有 masterdevelop 两个分支。
  • 我们平时的开发,拉取develop分支,新建 feature 分支,开发完成后合并到master分支,如有bug问题则在master分支的基础上上新建 hotfix 分支,修复后试具体情况合并 masterdevelop
  1. 在gitlab中将主仓库fork到个人仓库
  • Fork 出来的仓库完全属于你自己,你可以任意修改该仓库的代码及配置,但是除非你向项目主仓库提交 pull request,并且被接受通过,你才可以将你fork 仓库修改的代码合并到主仓库,否则不会对主仓库产生任何影响。
  • 一般来讲,pull 代码,需要从主仓库拉取最新的代码;push 的话,则只能严格推送到个人的子仓库。这里需要在gitlab中做好权限的分配。
  1. clone个人仓库到本地,并且在remote配置中upstream
  • upstream 指向远程主仓库地址
  • origin 指向远程个人仓库地址
git remote add upstream <主仓库地址>
# 执行 git remote -v 可以看到 remote 中有 origin 和 upstream
git remote -v
  1. 保持个人仓库和 upstream 同步
  • 这里需要注意,建议每天开发工作开始前,将 upstream 的代码更新到本地
# 同步upstream到本地
git fetch upstream
git checkout master
git merge upstream/master # 这里一般可以不用--no-ff
# 本地与远程个人仓库同步
git pull origin master
  1. 开始一个新功能的开发或一个新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
  1. 开发完成后提交到个人远程仓库前,同步 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
```
  1. 发起 pull requestmerge 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

  2. 修改并提交 PR > - 你的 PR 发布后,别人可以通过 check out branch 按钮查看并修改你的 PR。你自己也可以在本地修改并提交到相应的 feature 分支。 > - 当问题都解决了之后,你便可以点击 merge 按钮进行提交啦~~

  3. 最后,合并 upstreamorigin 仓库 > - 以上步骤介绍了具体的同步和 merge 方法 > - merge requestorigin 上已经没有 feature 分支了, 但是本地依然存在 feature 分支。这个时候只要执行以下命令即可修剪本地多余的分支 bash git remote prune origin