下面的示例演示了 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
出來的倉庫。
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é)作者)。
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ā)給小明。
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" />
如果小紅對反饋有任何疑問,可以在 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é)作更輕松方便。