Pull Request VS Merge Request?两者傻傻分不清楚?

举报
gentle_zhou 发表于 2023/06/04 13:31:20 2023/06/04
【摘要】 那么为何会有这种不同的称呼呢?我后来结合网上很多人的看法,个人理解有以下几种原因。

最近在和很多研发小伙伴交流的时候,发现了一个有趣的现象:关于合入代码的叫法,部分人说是MR,部分人说的却是PR;甚至有些人会义正言辞的教导我这是完全两样东西,但具体是啥他们也说不清。所以刚开始听到的时候,是很懵的,后面听多了被“解释”多了也就习惯,默认都是在说代码合并。但是心中的疑惑一直没有得到很好的解释。

最近趁着周末有点闲暇时光,上网去好好搜索了一番,学习了两者的含义,研究了两者到底有没有区别。

MR

MR,全称是Merge Request。研发团队成员从远端仓库目标分支(一般是dev分支)拉取代码,基于该目标分支新建特性分支。之后在修改完特性分支内代码后,推送到远端代码仓;紧接着就是新建一个Merge Request,期望将这个特性分支合入到目标分支内。

这也是我最熟悉的一种叫法,从学生时代到后面工作期间,我一直都是这么叫的,“帮我合并下MR”,“这个合并帮我看下,打个分”,“你这个MR,我给你合了哈”。也是我觉得最理解的称呼,毕竟代码合并嘛,不就是把我这个特性分支的代码合并到目标分支里去。

然后上网研究了下,发现这种叫法常见于GitLab或则Gitorious。针对的是不同分支之间的代码合并。
image.png

PR

PR,全称是Pulll Request。研发团队成员从远端仓库先fork一个别人的项目,然后在本地修改完代码后,先提交到自己的远端个人fork仓库;紧接着就是新建一个Pull Request,请求将我们的代码合入到别人的项目里去。

其实一开始我理解PR全称是Push Request,推送请求;而当我了解其全称的含义是拉取请求的时候,一开始是非常不能理解的。

接着上网研究了下,发现这种叫法常见于GitHub或则Bitbucket。针对的是在Fork模式下,将forked的特性分支里的代码提交回目标分支。
image.png

两者对比

查了下,海内外开发者其实对这两者的区别都挺头疼,但对比发现,其实就是一回事:两者其实表示同一种概念(把一个分支的代码合并到另一个指定分支),就是两种不同的术语罢了。

那么为何会有这种不同的称呼呢?我后来结合网上很多人的看法,个人理解有以下几种原因:

  1. GitHub这类PR的叫法针对的是代码合并阶段的初期操作(把代码从目标分支拉取下来);而GitLab这类MR的叫法针对的则是代码合并阶段的最后一步操作(把特性分支的代码合并到目标分支上)。
  2. GitHub最早主推的是fork模式,研发人员提交自己的代码是请求原作者把我们的代码拉取回去;而GitLab主推的是分支模式,开发者提交自己的代码回分支,将自己的特性分支合并到目标分支。(p.s.在GitHub上即使是分支模式也是叫PR,同理GitLab上fork模式也还是叫MR = =)
  3. GitHub上更多的是开源仓库,开源仓主人肯定不愿意别人自己在自己的仓库上面修改代码,都是让他们直接fork一个仓库,后面审批是否要把这些代码拉取回去;GitLab上则更多的是私人仓库,一个团队维护一个,那么就允许团队里直接对该仓库新建分支,开发完之后,直接请求合并回主干分支就行了。

image.png

image.png

参考资料

  1. https://stackoverflow.com/questions/23076923/what-is-a-merge-request
  2. https://www.theserverside.com/blog/Coffee-Talk-Java-News-Stories-and-Opinions/How-to-merge-any-GitLab-branch-into-master
  3. https://www.thepolyglotdeveloper.com/2015/02/contributing-git-repository-github/
  4. https://zhuanlan.zhihu.com/p/138868306
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。