吵瘋了,Pull Request究竟是個啥?

本文 github.com/smileArchit… 已收錄。
JavaMap是Java知識地圖,旨在讓開發者學習不迷路!Java學習請認準JavaMap。git

在團隊中我承擔了Committer 的責任,也就是幫同事們檢視代碼(Code Review)和合入代碼,常常聽到有同事在羣裏喊:「大佬,幫我合個 PR」,「大佬,我剛提交了一個 MR,幫忙合一下,急着出補丁」。 我有點懵了,PRMR 到底哪一個纔是正確的,這兩個到底有什麼區別,我決定先搞清楚這兩個概念再合入他們的代碼。[手動滑稽]github

什麼是Pull Request?

PR 的全稱是Pull Request,常常用 Github 的同窗對這個確定很熟悉了。Github 彙集了4000萬開發者,過億的開源項目,若是想給別人的開源倉庫貢獻代碼,一般是先 fork 別人的項目,而後本地修改完成提交到本身的我的 fork 倉庫,最後提交 PR 等待別人合入你的代碼。微信

Github 的工做流:markdown

fork 工做流

咱們重點看一下第6步,小明寫完代碼了想合入到原做者的倉庫,新建了一個「pull request」,拉請求?這明明是推啊,小明將本身的修改推到原做者的倉,感受叫「push request」比較合適吧。架構

既然 Github 堅持叫「pull request」,咱們試着理解一下它的思路,小明寫完代碼了內心確定是在想:原做者大神,我改了點東西,你快把個人修改拉回去吧。站在原做者的角度思考,叫pull request好像也說得過去,天天有大量的人從我這裏 fork 代碼走,我只會拉取我感興趣的代碼回來。app

我好像把本身說服了。oop

什麼是 Merge Request?

MR 的全稱是 Merge Request,相信玩過 Gitlab 的同窗都知道這個。學習

插播一下,Github這麼好用了爲何還有人玩 Gitlab,這就要幾年前提及了。在微軟沒有收購 Github 以前,Github 上面全部的項目必須是公開的,也就是說本身很渣的代碼也必需要公開,不能藏着噎着。可是在一些小的公司或者創業團隊,代碼這種核心資產是不但願被公開,他們迫切須要私密倉這種需求,因此不少人都選擇了 Gitlab。固然後面 Github 也放開了私有倉庫,這是後話了。網站

 merge 工做流

團隊中每一個人都從遠程倉庫 develop 分支拉取代碼,本地基於 develop 分支新建特性分支,修改完代碼將特性分支推到遠程倉,緊接着新建 Merge Request 指望將本身的特性分支合入 develop 分支。this

從上面這個流程來看Merge Request 就是將本身的特性分支合入到主幹分支。

Pull Request VS Merge Request

總結一下上面兩個例子。

Github 是玩 fork 模式的,開發者提交本身的代碼新建 Pull Request,請求原做者:「把個人代碼拉回去吧」。

Gitlab 是玩分支模式的,開發者提交本身的代碼新建 Merge Request,想將本身的特性分支合併到主幹。

上面總結的好像頗有道理,可是不要忘了,Github 也能夠玩分支模式,Gitlab 也能夠玩 fork 模式,更使人無語的是:

Github 上合併分支仍是叫 Pull Request; Gitlab 上fork 模式也是叫 Merge Request;

不行,這種答案我無法接受,去 stackoverflow上搜一些你們是怎麼理解的。果真有一個帖子很火:

Pull request vs Merge request

有一個回答摘取了 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 確實讓人難以理解,咱們去各大網站看看用戶的聲音。

StackOverflow

 知乎

從國外到國內都有大量的用戶對這個名字不理解,明明是提交提交代碼,爲何是 pull request,有些人甚至懷疑是名字打錯了。

若是讓我來給 Github 取名字,我可能會取:

  • push request 推請求
  • merge request 合併請求

想多了,不會有若是。 [嘿哈]

總結

Pull Request Merge Request 本質上都是合入代碼,只是站在不一樣角度有不一樣的說法而已,所以在學習和工做中不管用哪個都沒有問題。

另外,一個好的名字對於新手理解這項技術或者業務很是有幫助,好比看到「反向代理」這個名詞不少新手是懵的,你們還遇到哪些難以理解的詞歡迎在留言區討論和吐槽。

-- END --

不要白嫖,點個贊咯,筆芯~

做者簡介:
☕讀過幾年書:華中科技大學碩士畢業;
😂浪過幾個大廠:華爲、網易、百度……
😘一直堅信技術能改變生活,願保持初心,加油技術人!

微信搜索公衆號【愛笑的架構師】,關注這個對技術和生活有追求的技術人。

最後推薦一個寶藏開源項目,github.com/smileArchit…  JavaMap是Java知識地圖,讓開發者學習不迷路!Java學習請認準JavaMap。 JAVA核心知識點整理(283頁,超級詳細)免費領取。

相關文章
相關標籤/搜索