本文 github.com/smileArchit… 已收录。
JavaMap是Java知识地图,旨在让开发者学习不迷路!Java学习请认准JavaMap。git
在团队中我承担了Committer
的责任,也就是帮同事们检视代码(Code Review
)和合入代码,常常听到有同事在群里喊:“大佬,帮我合个 PR”,“大佬,我刚提交了一个 MR,帮忙合一下,急着出补丁”。 我有点懵了,PR
和 MR
到底哪一个才是正确的,这两个到底有什么区别,我决定先搞清楚这两个概念再合入他们的代码。[手动滑稽]github
PR
的全称是Pull Request
,常常用 Github
的同窗对这个确定很熟悉了。Github 汇集了4000万开发者,过亿的开源项目,若是想给别人的开源仓库贡献代码,一般是先 fork
别人的项目,而后本地修改完成提交到本身的我的 fork 仓库,最后提交 PR 等待别人合入你的代码。微信
Github 的工做流:markdown
咱们重点看一下第6步,小明写完代码了想合入到原做者的仓库,新建了一个“pull request
”,拉请求?这明明是推啊,小明将本身的修改推到原做者的仓,感受叫“push request
”比较合适吧。架构
既然 Github 坚持叫“pull request
”,咱们试着理解一下它的思路,小明写完代码了内心确定是在想:原做者大神,我改了点东西,你快把个人修改拉回去吧
。站在原做者的角度思考,叫pull request好像也说得过去,天天有大量的人从我这里 fork 代码走,我只会拉取我感兴趣的代码回来。app
我好像把本身说服了。oop
MR 的全称是 Merge Request
,相信玩过 Gitlab 的同窗都知道这个。学习
插播一下,Github这么好用了为何还有人玩 Gitlab,这就要几年前提及了。在微软没有收购 Github 以前,Github 上面全部的项目必须是公开的,也就是说本身很渣的代码也必需要公开,不能藏着噎着。可是在一些小的公司或者创业团队,代码这种核心资产是不但愿被公开,他们迫切须要私密仓这种需求,因此不少人都选择了 Gitlab。固然后面 Github 也放开了私有仓库,这是后话了。网站
团队中每一个人都从远程仓库 develop 分支拉取代码,本地基于 develop 分支新建特性分支,修改完代码将特性分支推到远程仓,紧接着新建 Merge Request 指望将本身的特性分支合入 develop 分支。this
从上面这个流程来看Merge Request 就是将本身的特性分支合入到主干分支。
总结一下上面两个例子。
Github 是玩 fork 模式的,开发者提交本身的代码新建 Pull Request,请求原做者:“把个人代码拉回去吧”。
Gitlab 是玩分支模式的,开发者提交本身的代码新建 Merge Request,想将本身的特性分支合并到主干。
上面总结的好像颇有道理,可是不要忘了,Github 也能够玩分支模式,Gitlab 也能够玩 fork 模式,更使人无语的是:
Github 上合并分支仍是叫 Pull Request; Gitlab 上fork 模式也是叫 Merge Request;
不行,这种答案我无法接受,去 stackoverflow上搜一些你们是怎么理解的。果真有一个帖子很火:
有一个回答摘取了 Gitlab 的官方解释:
Merge or pull requests are created in a git management application and ask an assigned person to merge two branches. Tools such as GitHub and Bitbucket choose the name pull request since the first manual action would be to pull the feature branch. Tools such as GitLab and Gitorious choose the name merge request since that is the final action that is requested of the assignee. In this article we'll refer to them as merge requests.
翻译过来简单理解就是:这两个没有本质区别,站在不一样立场说法不同而已。
好了,官方已经盖棺定论了,这两个就是一个东西,不要纠结啦~
对于初学者来讲,Github 的 pull request 确实让人难以理解,咱们去各大网站看看用户的声音。
从国外到国内都有大量的用户对这个名字不理解,明明是提交提交代码,为何是 pull request,有些人甚至怀疑是名字打错了。
若是让我来给 Github 取名字,我可能会取:
push request
推请求merge request
合并请求想多了,不会有若是。 [嘿哈]
Pull Request
和 Merge Request
本质上都是合入代码,只是站在不一样角度有不一样的说法而已,所以在学习和工做中不管用哪个都没有问题。
另外,一个好的名字对于新手理解这项技术或者业务很是有帮助,好比看到“反向代理
”这个名词不少新手是懵的,你们还遇到哪些难以理解的词欢迎在留言区讨论和吐槽。
-- END --
不要白嫖,点个赞咯,笔芯~
做者简介:
☕读过几年书:华中科技大学硕士毕业;
😂浪过几个大厂:华为、网易、百度……
😘一直坚信技术能改变生活,愿保持初心,加油技术人!微信搜索公众号【爱笑的架构师】,关注这个对技术和生活有追求的技术人。
最后推荐一个宝藏开源项目,github.com/smileArchit… JavaMap是Java知识地图,让开发者学习不迷路!Java学习请认准JavaMap。 JAVA核心知识点整理(283页,超级详细)免费领取。