標籤:

GitHub 的 Pull Request 是指什麼意思?


我嘗試用類比的方法來解釋一下 pull reqeust。想想我們中學考試,老師改卷的場景吧。你做的試卷就像倉庫,你的試卷肯定會有很多錯誤,就相當於程序里的 bug。老師把你的試卷拿過來,相當於先 fork。在你的卷子上做一些修改批註,相當於 git commit。最後把改好的試卷給你,相當於發 pull request,你拿到試卷重新改正錯誤,相當於 merge。

當你想更正別人倉庫里的錯誤時,要走一個流程:

  1. 先 fork 別人的倉庫,相當於拷貝一份,相信我,不會有人直接讓你改修原倉庫的
  2. clone 到本地分支,做一些 bug fix
  3. 發起 pull request 給原倉庫,讓他看到你修改的 bug
  4. 原倉庫 review 這個 bug,如果是正確的話,就會 merge 到他自己的項目中

至此,整個 pull request 的過程就結束了。

理解了 pull request 的含義和流程,具體操作也就簡單了。以 Github 排名最高的 https://github.com/twbs/bootstrap 為例說明。

1. 先點擊 fork 倉庫,項目現在就在你的賬號下了

2. 在你自己的機器上 git clone 這個倉庫,切換分支(也可以在 master 下),做一些修改。

~ git clone https://github.com/beepony/bootstrap.git
~ cd bootstrap
~ git checkout -b test-pr
~ git add . git commit -m "test-pr"
~ git push origin test-pr

3. 完成修改之後,回到 test-pr 分支,點擊旁邊綠色的 Compare pull request 按鈕

4. 添加一些注釋信息,確認提交

5. 倉庫作者看到,你提的確實是對的,就會 merge,合併到他的項目中

以上就是 pull reqesut 的整個流程,希望對你有幫助~

參考文檔:

Fork A Repo - User Documentation

Using pull requests

Creating a pull request


我從單純的語言學角度解釋一下為什麼「pull request」這個片語這麼令人費解。

先說正確的理解:pull request是一個request,它的目的是讓別人pull你的東西。

然而pull和request兩個名詞直接相連構成偏正短語,二者之間具體是什麼關係是不確定的。

思考:water hose, rubber hose, fire hose, garden hose 這四個短語中,兩個詞之間分別是什麼關係?

我第一次看到pull request這個片語的時候,誤以為這個request的目的是請求別人允許自己pull別人的東西。

另外,pull和request還都有動詞義,放到一起的時候,還可能被誤解成動賓短語(pull作動詞,request作名詞)。

英語中很多單詞有多種詞性,另外對一串名詞直接相連構成片語的句法又比較寬容,這兩個性質容易被濫用,造成溝通上的不便。

恰好漢語也具有這兩個特點——你把上文中的「pull request」都換成「拉取請求」,看看是不是依然成立?

當然,熟悉了GitHub的工作流程後,你可能就不再感覺pull request這個片語有歧義或是費解了。

這是專業知識消除歧義的典型例子。


有一個倉庫,叫Repo A。你如果要往裡貢獻代碼,首先要Fork這個Repo,於是在你的Github賬號下有了一個Repo A2,。然後你在這個A2下工作,Commit,push等。然後你希望原始倉庫Repo A合併你的工作,你可以在Github上發起一個Pull Request,意思是請求Repo A的所有者從你的A2合併分支。如果被審核通過並正式合併,這樣你就為項目A做貢獻了


使用過git的應該都知道git pull,這個命名相當於連續執行兩個命令git fetch然後git merge。所以,pull request的意思就是一個「請求」(request),請對方做一個git fetch拿到request中的代碼commits,然後git merge一下到某個分支上。

pull request簡稱PR,是github的概念,不是git的概念,所以也不是立刻出結果的,需要有人去同意完成這個PR,當然同意完成PR的可以是自己,也可以拒絕PR。

現實項目中,即使自己對某個repo的特定分枝有寫入許可權,也可以提PR來修改,因為這是code review的一種方式,讓團隊的其他人看一看改的咋樣。


我改了你們的代碼,你們拉回去看看吧 !!!


就是你想check in代碼但是你沒有許可權,所以要求別人的意思。大家說的那麼複雜幹什麼。


很簡單,pull request就是請求別人pull你的repo。

當然,一般發起pull request的人都是從被請求人哪裡clone的代碼(github上則可以直接fork),一般比被請求人的項目提前若干commit。

pull request只是一種項目合作形式,github只是整合了相應功能,脫離github照樣能pr。

比如Linux內核項目,直接給linus發郵件,標題就是Pull Request。郵件里寫上git的url和泥新增的feature或者修的bug。如果linus覺得ok,就會根據給出的git url去git pull

GITHUB只是把上述過程集成在了站內,更加方便新手。


GitHub上這裡做了專門的解釋(頁面有交互),淺顯易懂。

Understanding the GitHub Flow · GitHub Guides

可以從字面上理解:

Request是請求的意思;Pull是從主幹(Master)的角度來說的,可以理解為把主幹的分支的代碼拉(Pull)回主幹,也就是代碼合併的意思。

所以合起來理解,就是『請求代碼合併』


我改了你們的代碼,但是我不是你們git庫成員,不能開個分支改好求合併(merge request),只能自己搞一份副本改好求你們拉我代碼了(pull request)


求拉?


我覺得也有人會有這個問題,為什麼叫Pull Request,應該這麼解釋:

首先這是一個Request(請求),其次這才是一個Pull(拉),不過「拉」的主語不是自己,而是對方。總結起來也就是,「請求對方你的代碼」。

---------------------------

為啥我總覺得叫Push Request更好呢。。。


提交一個合併的請求


我修改了你的代碼,所以請求(request)你把我修改過的代碼拉(pull)回去看看~


就是從一個其他分支,或fork出去倉庫的分支,申請向主倉庫合併(一般為master分支),我覺得叫 Merge Request更合適,GitLab就是這樣叫的!


github用pull request這個表達是因為git有一個pull命令,是用來獲取目標的代碼的。即用pull的對象的代碼更新自己的代碼。pull request就是發request讓你想讓其更新的人去pull你的代碼,從而用你的代碼去更新他的代碼。


http://blog.csdn.net/zhangdaiscott/article/details/17438153——Pull Request的正確打開方式(如何在GitHub上貢獻開源項目)


用來表達你的熱情,伸出援手,或者嘲諷


不看文檔么?https://help.github.com/articles/using-pull-requests

相當於變更請求呀...

主repo(upstream)只開放給某些人,其他人做貢獻就得用pull request,讓有許可權的人review後merge進去


Pull Request = (Please) Pull (my check-in) Request.


求你拉我


推薦閱讀:

如何在 GitHub 上寫博客?
有哪些程序化交易方面的 GitHub 作者值得關注?
如何看待github開源軟體的作者獲中國科學大獎?
在開發過程中使用git rebase還是git merge,優缺點分別是什麼?
如何用其他方式下載 GitHub 客戶端?

TAG:GitHub |