如何提交一个 PR

7,931 阅读4分钟

什么是 PR ?PR 是 Pull Request 的缩写。那啥又是 Pull Request 呢?来,老办法,举个栗子!

当你在某个代码托管平台发现了一个不错的项目,你看了一遍项目源码,“哇这个项目好优秀,我想为它做贡献!”。可是你并没有开发权限,于是你去找作者。

你:“作者大大,老子想给你的项目生猴子,哦不,做贡献!请给我开发权限!”

作者:“???你丫谁啊,我给你权限你瞎改、甚至删库跑路怎么办?!”

虽然被拒绝的你很伤心,但你还是有做贡献的心。于是,某代码托管平台给你指了条明路:

  1. 把项目复制一份到自己的空间,自己空间里的复制版本就可以任意修改了。
  2. 把项目拉下来“做贡献”,做完后更新到远程版本库。
  3. 告诉作者,“我把你项目某处改了改,我觉得改的挺好的,你看看要不要采纳一下?”
  4. 作者接受了建议,把你的版本与自己的版本合并。

这条“明路”中的第三个步骤就是 Pull Request 。

说明白这东西能干啥,下面就来演练一下。

实际演练

第一步:复制(Fork)原项目

打开 Github,先到原项目的页面,看一下右上角的那排按钮:

这三个按钮的功能分别是「Watch(关注)」、「Star(给星星)」以及「Fork(复制一份到你的帐号)」。点击Fork 按钮,会出现一个还挺好看的动画:

(☝别问我为啥突然变成了 vue … 原来的图找不到了… 后补的图)

这个动画表示正在把原项目,叉一份到你的空间中。完成后,会跳转到自己复制的项目页面,在项目名下,会显示该项目是从什么项目搞下来的:

现在,你对放在自己帐号下的这个复制项目有完整的存取权限了。

第二步:从远程版本库拉下来修改,再推上去

这一步就不细讲了,就是最基本的一套,用 clone 还是用 pull ,都可以,只要把自己想改的部分修改好,并且提交推送至自己帐号下那个复制的远程库就好了。

第三步:发PR 给原作者

回到自己的专案页面,可以找到一个「New pull request」的按钮:

点击后,可开始填写PR 的相关信息,让作者知道你这个PR 大概做了什么事,在这里也可以选择要发PR 到原作的哪个分支。

填写完毕后,按下「Create pull request」按钮后,即算完成送出PR。接着,就可以看到原项目的 Pull Request 这一项中有你的 PR 请求了:

第五步:原作者收下PR

原作者现在可以在项目的页面看到 Pull requests 们了。(原谅我没接到过 PR …没有截图…)

点进去看细节,可以看到这些 PR 做了哪些修改。如果觉得这些更改可以采纳,只要点击 Merge pull request 按钮后,就会合并提交者的 Commit。

OK!现在你已经给项目生猴子,哦不,做出贡献了!

后记

发送 PR,原作者确认可以采纳就合并进来,这种方式,在开源界是很常见的贡献代码方式。

当然,这也不仅仅在开源项目中有作用。在企业内部的开发,也适合使用发 PR 的方式。在开发产品的时候,通常会挑选固定一个分支做为可以上线的正式版本分支。但当更多人参与同一个项目,让每个人都可以提交到正式上线的分支不是个好的做法,这时候便可使用 PR 方式来进行。

每位开发者都先把项目 Fork 一份到自己的帐号中,待功能完成后再发 PR 回公司的项目。管理者收到PR 后,进行 Code Review 并确认无误后便可进行合并。

很多公司内部使用的都是 GitLab ,但不必担心,GitLab 也完全支持这个功能,只是笔者在写这篇文章前正在给 Angular 的中文文档项目提 PR ,就顺手截了 Github 的图,大家在使用 GitLab 时可自行探索,功能上差不多。

啊?你问我为啥要给 Angular 的中文文档翻译提 PR ?当然是因为如果被采纳以后就可以吹牛说自己参与过 Angular 的中文文档翻译啦!嘿嘿嘿嘿