鍍金池/ 教程/ Java/ 示例
功能分支工作流
工作方式
正式倉庫
示例
前言
<code>Gitflow</code> 工作流
工作流概要
<code>Forking</code> 工作流
Pull Requests
示例
集中式工作流
發(fā)布分支
示例
示例
工作方式
維護(hù)分支
Pull Requests
Forking工作流的分支使用方式
解析Pull Request
歷史分支
在 <code>Forking</code> 工作流中使用 <code>Pull Request</code>
沖突解決
功能分支
工作方式
在 <code>Gitflow</code> 工作流中使用 <code>Pull Request</code>
工作方式
在功能分支工作流中使用 <code>Pull Request</code>
示例
工作方式

示例

下面的示例演示了 Pull Request 如何在在 Forking 工作流中使用。

也同樣適用于小團(tuán)隊的開發(fā)協(xié)作和第三方開發(fā)者向開源項目的貢獻(xiàn)。

在示例中,小紅是個開發(fā),小明是項目維護(hù)者。他們各自有一個公開的 Bitbucket 倉庫,而小明的倉庫包含了正式工程。

小紅 fork 正式項目

http://wiki.jikexueyuan.com/project/git-workflow-tutorial/images/pull-request-1.png" alt="pull-request-1" />

小紅先要 fork 小明的 Bitbucket 倉庫,開始項目的開發(fā)。她登陸 Bitbucket ,瀏覽到小明的倉庫頁面, 點(diǎn) Fork 按鈕。

http://wiki.jikexueyuan.com/project/git-workflow-tutorial/images/pull-request-2.png" alt="pull-request-2" />

然后為 fork 出來的倉庫填寫名字和描述,這樣小紅就有了服務(wù)端的項目拷貝了。

小紅克隆她的 Bitbucket 倉庫

http://wiki.jikexueyuan.com/project/git-workflow-tutorial/images/pull-request-3.png" alt="pull-request-3" />

下一步,小紅克隆自己剛才 fork 出來的 Bitbucket 倉庫,以在本機(jī)上準(zhǔn)備出工作拷貝。命令如下:

git clone https://user@bitbucket.org/user/repo.git

請記住,git clone 會自動創(chuàng)建 origin 遠(yuǎn)程別名,是指向小紅 fork 出來的倉庫。

小紅開發(fā)新功能

http://wiki.jikexueyuan.com/project/git-workflow-tutorial/images/pull-request-4.png" alt="pull-request-4" />

在開始改代碼前,小紅要為新功能先新建一個新分支。她會用這個分支作為 Pull Request 的源分支。

git checkout -b some-feature
# 編輯代碼
git commit -a -m "Add first draft of some feature"

在新功能分支上,小紅按需要添加提交。甚至如果小紅覺得功能分支上的提交歷史太亂了,她可以用交互式 rebase 來刪除或壓制提交。

對于大型項目,整理功能分支的歷史可以讓項目維護(hù)者更容易看出在 Pull Request 中做了什么內(nèi)容。

小紅 push 功能到她的 Bitbucket 倉庫中

http://wiki.jikexueyuan.com/project/git-workflow-tutorial/images/pull-request-5.png" alt="pull-request-5" />

小紅完成了功能后,push 功能到她自己的 Bitbucket 倉庫中(不是正式倉庫),用下面簡單的命令:

git push origin some-branch

這時她的變更可以讓項目維護(hù)者看到了(或者任何想要看的協(xié)作者)。

小紅發(fā)起 Pull Request

http://wiki.jikexueyuan.com/project/git-workflow-tutorial/images/example-6.png" alt="example-6" />

Bitbucket 上有了她的功能分支后,小紅可以用她的 Bitbucket 賬號瀏覽到她的 fork 出來的倉庫頁面, 點(diǎn)右上角的【 Pull Request 】按鈕,發(fā)起一個 Pull Request 。

彈出的表單自動設(shè)置小紅的倉庫為源倉庫,詢問小紅以指定源分支、目標(biāo)倉庫和目標(biāo)分支。

小紅想要合并功能到正式倉庫,所以源分支是她的功能分支,目標(biāo)倉庫是小明的公開倉庫, 而目標(biāo)分支是 master 分支。另外,小紅需要提供 Pull Request 的標(biāo)題和描述信息。

如果需要小明以外的人審核批準(zhǔn)代碼,她可以把這些人填在【 Reviewers 】文本框中。

http://wiki.jikexueyuan.com/project/git-workflow-tutorial/images/pull-request-7.png" alt="pull-request-7" />

創(chuàng)建好了 Pull Request ,通知會通過 Bitbucket 系統(tǒng)消息或郵件(可選)發(fā)給小明。

小明 review Pull Request

http://wiki.jikexueyuan.com/project/git-workflow-tutorial/images/pull-request-8.png" alt="pull-request-8" />

在小明的 Bitbucket 倉庫頁面的【 Pull Request 】Tab 可以看到所有人發(fā)起的 Pull Request 。 點(diǎn)擊小紅的 Pull Request 會顯示出 Pull Request 的描述、功能的提交歷史和每個變更的差異( diff )。

如果小明想要合并到項目中,只要點(diǎn)一下【 Merge 】按鈕,就可以同意 Pull Request 并合并到 master 分支。

但如果像這個示例中一樣小明發(fā)現(xiàn)了在小紅的代碼中的一個小 Bug ,要小紅在合并前修復(fù)。

小明可以在整個 Pull Request 上加上評注,或是選擇歷史中的某個提交加上評注。

http://wiki.jikexueyuan.com/project/git-workflow-tutorial/images/pull-request-9.png" alt="pull-request-9" />

小紅補(bǔ)加提交

如果小紅對反饋有任何疑問,可以在 Pull Request 中響應(yīng),把 Pull Request 當(dāng)作是她功能討論的論壇。

小紅在她的功能分支新加提交以解決代碼問題,并 push 到她的 Bitbucket 倉庫中,就像前一輪中的做法一樣。

這些提交會進(jìn)入的 Pull Request ,小明在原來的評注旁邊可以再次 review 變更。

小明接受 Pull Request

最終,小明接受變更,合并功能分支到 master 分支,并關(guān)閉 Pull Request

至此,功能集成到項目中,其它的項目開發(fā)者可以用標(biāo)準(zhǔn)的 git pull 命令 pull 這些變更到自己的本地倉庫中。

到了這里,你應(yīng)該有了所有需要的工具來集成 Pull Request 到你自己的工作流。

請記住,Pull Request 并不是為了替代任何 基于Git的協(xié)作工作流, 而是它們的一個便利的補(bǔ)充,讓團(tuán)隊成員間的協(xié)作更輕松方便。