简写说明

- MR = Merge Request
- 主仓 = 组织创建的仓库(下文中是 awesome-php 组织创建的 awesome-one 仓库)

什么是Merge Request

- 相信很多人都不太懂这个 MR 到底是什么,通俗地说,MR 就是一个 merge 请求。
- 创建一个 MR 当然就可以理解为创建一个合并请求。MR 的存在主要是为了权限控制。

Forking Workflow

- 用 Git 的同学最开始接触的想必是 Git Workflow 吧。
- 什么是 Git Workflow?其实就是多人在同一个仓库上进行代码托管,然后仓库存在多个分支,一般来说每个新功能会创建一个分支,然后根据不同的阶段合并到不同环境对应的分支上,对功能需求进行测试、验收以及上线。
- 当开发团队规模较小的时候,使用 Git Workflow 无疑是相对适合的,优点是相对灵活。但是当团队人数达到一定程度,项目较多之后,这种工作流就会暴露本身的局限性,权限管理比较混乱。
- 这个时候,Forking Workflow 就应运而生了。
- 什么是 Forking Workflow ?Forking Workflow 就是存在一个主仓,其他开发人员把主仓 Fork 一份到自己的仓库中,然后在自己的仓库中进行功能开发,开发完成后提交 Merge Request ,然后团队 Review ,确认没问题之后进行合并更新操作。
- 相比 Git Workflow ,Forking Workflow 可以更好地管理主仓代码,保证主仓代码的安全、一致性等,且可以杜绝分支过多引发的其他问题。

怎么创建Merge Request

言归正传,让我们看看怎么创建 MR。在我朋友圈中有大L和小L两位小伙伴,分别使用 Git Workflow 和 Forking Workflow 两种不同的 Git 工作流。中国传统敬老爱幼,那么就由使用 Forking Workflow 的小L为我们演示一下怎么创建一个 MR。

Forking Workflow

此时使用 Forking Workflow 的小L同学接到一个需求,小L思路清晰,他首先查看主仓( awesome-php 名下的 awesome-one 仓库,下文一律使用主仓称呼),然后基于主仓 Fork 一个属于自己的仓库:

此时小L个人(也就是zmcdbp)名下也有了一个 awesome-one 仓库,小L接着要做的事自然就是 Clone 自己的仓库到本地:

突然接到的需求需要开发一个 phpinfo 页面,遵循 Forking Workflow 规范的小L的做法是先基于本地的 master 分支衍生一个 feature-phpinfo 的功能分支,然后在该分支上进行开发,开发完成后添加更改的代码到缓存区,提交 commit :

完成本地提交之后,接下来要进行远程分支的提交,小L提交到了自己名下的仓库中(也就是zmcdbp/aweosme-one),分支名称与本地分支保持同步,方便日后翻阅查找(此处因为小L名下的 awesome-one 仓库中尚未存在 feature-phpinfo 分支,所以在 push 操作的时候需要带上 -u 参数告诉 GitLab 需要创建一个名叫 feature-phpinfo 的远程分支):

push 成功之后小L选择了回到 GitLab Web 中查看刚刚提交了更新的仓库:

小L很开心,因为发现他名下的 awesome-one 仓库 中已经多了一个远程分支 feature-phpinfo。接下来小L要把这个已经开发好的功能分支合并到主仓中以便后续进行功能测试以及产品验收等步骤。首先小L创建了一个 MR (因为本地分支是推送到了小L从主仓中 Fork 出来的个人仓库中,所以创建 MR 的动作也应该在自己仓库的 GitLab Web 页面中进行):

创建 MR 的页面信息量相当大,懒癌晚期的小L选择了只关注 Title、Description、Source branch、Target branch 以及 Remove source branch when merge request is accept 这几项,如果你比较勤快当然也可以对其他配置项进行详细配置。懒癌晚期的小L关注的这几项配置都是什么呢?Title 当然就是本次 MR 的简要说明,Description 自然就是详细说明,里面可以填写本次合并主要功能以及相关负责人员等(支持 Markdown 噢!),Source branch 英语超赞的你肯定已经猜到这个就是我们要发起合并的分支,Target branch 自然就是接受合并的分支啦,Remove… 说的就是当本次 MR 被接受之后,自动删除发起合并的分支,是不是超贴心!小L对自己比较关注的几项配置进行简单填写后,点击下方的提交按钮,创建 MR 的操作就完成啦!连懒癌晚期的小L都能轻松创建,是不是超简单!

但是聪明的你肯定发现了事情似乎并没有这么简单!Target branch 默认是 master 分支并且似乎无法更改,那么如果需要合并到其他如 dev 分支的话该怎么办呢?没关系,点击 Target branch 旁边的 Change branches 就可以对 Source branch 和 Target branch 进行更改啦!(合并请求不单单可以向主仓发起,还可以对自己仓库内存在的两个分支进行发起,或者对主仓派生的其他仓库中的分支发起)

在 Forking Workflow 中一个 MR 的诞生差不多需要经历的就这么多,当然还有更多细节由于篇幅问题没有一一细说,还请见谅。

Git Workflow

组织把比较重要的 hello world 需求留给了我们成熟稳重使用 Git Workflow 的大L同学,大L不假思索地访问了主仓的页面并进行了 Clone 操作,然后在本地创建了一个需要进行功能开发的 feature-hello-world 分支。注意,大L是从主仓 Clone,而小L是从自己 Fork 出来的仓库 Clone。

接着大L迅速完成了开发工作,与小L的本地提交操作类似,把更改的文件添加到缓存区,然后添加 commit。

完成了本地提交后,大L选择了把新开发的功能分支推送到远程仓库中。(与小L类似,因为远程仓库中尚未存在与本地同名的分支,所以需要添加 -u 参数创建远程分支)

完成推送到远程仓库的操作后,大L打开了主仓的页面然后点击旁边出现的 Create Merge Request 按钮来创建一个 MR。进入到创建页面之后,大L的操作就跟小L点击创建 MR 按钮后的操作一致了,在这就不再重复了。

GitLab轻松创建一个Merge Request相关推荐

  1. 如何轻松创建一个Windows 8可启动的USB闪盘 (Windows to Go)

    杂序 [今天早上又是一个泥泞而拥堵的北京,对于北京"首堵"的交通吐槽是没有什么用用处的,最好的方式还是找到一个消遣的方式,而对于我正好利用和打不车奔波在北京各地铁线路的" ...

  2. 用Python轻松创建一个交互式可视化大屏!

    大家好,我是小z,也可以叫我阿粥 本文将和大家一起学习一个专门为数据科学家(机器学习工程师)设计的基于 Python 的三方库 ---- Streamlit,它只需几行代码即可创建外观精美的应用程序, ...

  3. 只需3分钟,就能轻松创建 一个SpreadJS的React项目

    概述 SpreadJS 纯前端表格控件 V11.2(SP2) 已经全面支持了 React 的拓展.接下来我们看下如何利用3分钟快速创建一个 SpreadJS 的 React 项目. 1.新建React ...

  4. 使用 Pandas、Jinja 和 WeasyPrint,轻松创建一个 PDF 报表

    作者 |周萝卜 来源 |萝卜大杂烩 我们都知道,Pandas 擅长处理大量数据并以多种文本和视觉表示形式对其进行总结,它支持将结构输出到 CSV.Excel.HTML.json 等.但是如果我们想将多 ...

  5. 使用 Pandas, Jinja 和 WeasyPrint,轻松创建一个 PDF 报表

    我们都知道,Pandas 擅长处理大量数据并以多种文本和视觉表示形式对其进行总结,它支持将结构输出到 CSV.Excel.HTML.json 等.但是如果我们想将多条数据合并到一个文档中,就有些复杂了 ...

  6. Gitlab Merge Request Builder Plugin 配置小记

    2019独角兽企业重金招聘Python工程师标准>>> 以前在给一些开源项目贡献代码的时候,在github上一提交pull request或者提交的分支代码更新了的时候,jenkin ...

  7. 提交 Merge Request 申请进行code review

    为了强化代码记录的可读性并协助 Code review 的执行,通过参考已有流程方案,设定一种适合的 Git 流程方案. 流程步骤 新建分支 提交 commit 记录 合并 commit 记录 推送到 ...

  8. 【GitHub】GitHub 的 Pull Request 和 GitLab 的 Merge Request 有区别吗?

    GitHub 的 Pull Request 和 GitLab 的 Merge Request 有区别吗? 在 GitHub 上混久了,对 Pull Request 就-- 在 GitLab 上混久了, ...

  9. corel产品注册样机安装代码_为你的产品创建一个高逼格的宣传片

    大家好,我是独立开发者Larry-当我们的产品或功能发布的时候,一定想要一套高大上的宣传图或宣传视频,不幸的是,由于预算限制.时间排期以及技术门槛等一系列原因,我们不得不降低要求- 今天就给大家推荐一 ...

最新文章

  1. 为选择屏幕的字段设置F4帮助
  2. Django学习笔记之Django ORM Aggregation聚合详解
  3. as3分页——页数多了后自动居中类似谷歌分页
  4. Google Chrome Frame
  5. SDUT 2080 最长公共子序列问题
  6. 用于科研的移动机器人平台推荐
  7. NVisionXR_iOS教程五 —— 添加灯光渲染
  8. LibMeshEquationSystem 类接口
  9. 2016计算机二级c语言题库,计算机二级c语言题库2016精选
  10. mysql查询男生基本情况_MySQL(一)基本查询
  11. 未来人工智能发展趋势
  12. app显示服务器图片不显示,如何将存在本地服务器的图片,在APP前台显示
  13. 易语言大漠前台切换多开模板教程
  14. 义乌义川机器人_义乌毛氏发源地——尚阳
  15. 解决英飞凌ads软件的中文注释乱码问题
  16. python12306买票_自己用python随意写的12306订票代码
  17. 人脸检测,身份证扫描调三方接口获取图片base64路径转file,存入数据库(Vue)
  18. win7/8USB转串口驱动不起作用解决方法
  19. 用 Python 分析全球最美Top100女神
  20. centos删除文件最后一行

热门文章

  1. 【连载】如何掌握openGauss数据库核心技术?秘诀一:拿捏SQL引擎(2)
  2. Oracle坏块处理常用SQL
  3. Oracle面对“数据倾斜列使用绑定变量”场景的解决方案
  4. 赠书5本包邮:数据思维实践、Cloud Native分布式架构原理与实践
  5. 新补丁更新(RU和RUR),新的版本(Release 18和19)
  6. OAuth:每次授权暗中保护你的那个“MAN”
  7. 扎根CNCF社区贡献五年是怎样的体验?听听华为云原生开源团队的负责人怎么说
  8. 【华为云技术分享】小熊派华为物联网操作系统LiteOS裸机驱动移植02-LCD驱动移植及使用
  9. 无码系列-2-代码架构空想
  10. SpringMVC处理请求或响应数据