理解 PR 和 MR 的区别
潘忠显 / 2024-04-10
背景:前边有文章提到 “给 Redis 提了一个 PR (Pull Request)”。我对象问我,不是应该叫 MR (Merge Request) 吗?
Pull Request 和 Merge Request 是合作开发代码过程中的常见术语。今天就来简单地说说 PR 和 MR 有什么区别,让大家彻底搞清楚。
在代码协作开发的项目中,每个开发者会在自己的分支进行开发。当他完成功能开发之后, Request,请求其他人审查他们的代码,并将其合并到主分支。
在 GitHub 上,这个请求叫 Pull Request。我们可以在项目的页面中,看到一个 Pull requests 的页签:
GitHub 官方文档里有介绍 “fork and pull request” workflow,具体的几个步骤如下。看懂这个工作流,我们就很容易理解为什么叫 Pull Request 了:
- 用户需要自己 fork 出一个仓库,在自己的仓库/分支上做修改
- 要合并到主分支,需要请求维护者**“拉取”**自己的仓库上的分支,所以是 Pull Request,这描述了**动作/过程**
在工蜂、Coding等一些代码托管平台上,这个动作就叫 Merge Request,页面上有对应的标签。
因为在工蜂上,主要场景是为各个内部团队维护项目,大多数项目有少数固定的成员,大家都有项目的权限——可以直接往仓库中推送分支。这种情况下,如果要接受开发者的变更,就只需要将开发者推送的分支合并到主分支即可,没有从别的仓库拉取的过程。
在工蜂上,项目默认都是不开 Fork,如要让项目可以被 Fork 需要做额外的设置。
另外,相比于 Pull Request 更能描述拉取动作,Merge Request 能更直观地描述了这个请求的目的——为了合并代码到主分支。
!!! 当然,GitHub 上托管的项目,也有同一个仓库中将开发分支合并到主分支的场景,也叫 Pull Request;在工蜂上,也有开源项目维护,是 fork 出去然后合并 forked 仓库的分支,也叫 Merge Request。
所以,是 PR 还是 MR 基本上是对应某个托管平台的,并没有本质上的区别。