GitHub 的 Pull Request 是指什麼意思?
我嘗試用類比的方法來解釋一下 pull reqeust。想想我們中學考試,老師改卷的場景吧。你做的試卷就像倉庫,你的試卷肯定會有很多錯誤,就相當於程序里的 bug。老師把你的試卷拿過來,相當於先 fork。在你的卷子上做一些修改批註,相當於 git commit。最後把改好的試卷給你,相當於發 pull request,你拿到試卷重新改正錯誤,相當於 merge。
當你想更正別人倉庫里的錯誤時,要走一個流程:- 先 fork 別人的倉庫,相當於拷貝一份,相信我,不會有人直接讓你改修原倉庫的
- clone 到本地分支,做一些 bug fix
- 發起 pull request 給原倉庫,讓他看到你修改的 bug
- 原倉庫 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 DocumentationUsing pull requestsCreating 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 pullGITHUB只是把上述過程集成在了站內,更加方便新手。
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 |