假設(shè)目前有兩個(gè)開發(fā)者A和B共同完成一個(gè)項(xiàng)目,首先確定一個(gè)主開發(fā)者,這里就假定為開發(fā)者A了,首先開發(fā)者A在自己的Github上創(chuàng)建一個(gè)遠(yuǎn)程倉(cāng)庫(kù),然后再在本地創(chuàng)建一個(gè)本地倉(cāng)庫(kù),再將電腦和Github關(guān)聯(lián)起來(lái),
??? 干完這些工作后開發(fā)者A就開始愉快地寫代碼(作為主開發(fā)者可能就先把大體框架搭建起來(lái)),框架搭完后將代碼提交到本地倉(cāng)庫(kù)中,然后push到自己的Github遠(yuǎn)程倉(cāng)庫(kù)上,由于A是主開發(fā)者那他肯定是項(xiàng)目的管理者,所以他的Github遠(yuǎn)程倉(cāng)庫(kù)可以是為源倉(cāng)庫(kù),那么開發(fā)者B自然而然就是拉下手的,開發(fā)者A將自己寫的代碼推送(push)完了之后,然后就是開發(fā)者B大顯身手的時(shí)刻了,開發(fā)者B立馬克隆(clone)了源倉(cāng)庫(kù)也就是開發(fā)者A的之前push到自己的Github上的項(xiàng)目,B大刀闊斧地寫完代碼后直接一個(gè)push,咦...怎么推送不上去,提示什么權(quán)限問(wèn)題,你當(dāng)然push不上去,因?yàn)槟鞘莿e人的倉(cāng)庫(kù)(而且你也沒(méi)有關(guān)聯(lián)),要是你直接能推送上去,那世界豈不要?dú)缌?;好吧,正確的做法是:開發(fā)者B先Fork開發(fā)者A的Github上的倉(cāng)庫(kù),F(xiàn)ork的就相當(dāng)于建立一個(gè)分支(拷貝別人的項(xiàng)目),F(xiàn)ork了之后開發(fā)者A的Github上會(huì)出現(xiàn)一個(gè)和開發(fā)者A一模一樣的倉(cāng)庫(kù),然后開發(fā)者B在clone自己的Github上的倉(cāng)庫(kù)到本地,這樣就可以開工了,寫完代碼后先push到自己的Github遠(yuǎn)程倉(cāng)庫(kù)中,就在此刻機(jī)智的同學(xué)會(huì)發(fā)現(xiàn):如果在開發(fā)者B寫完后準(zhǔn)備push的時(shí)候,勤奮的開發(fā)者A又同時(shí)寫了其它模塊并且已經(jīng)push到Github上了,這可咋辦哩!別方,Git早已為我們想好了一切,此時(shí)的話要做的工作就是將開發(fā)者A遠(yuǎn)程倉(cāng)庫(kù)的更新同步到開發(fā)者B的本地,那么fetch就可以閃亮登場(chǎng)了,fetch就是從遠(yuǎn)程倉(cāng)庫(kù)中抓取本地倉(cāng)庫(kù)中的沒(méi)有的數(shù)據(jù),別急,fetch僅僅只是抓取數(shù)據(jù),之后還得用merge合并一下分支,哇...合并成功沒(méi)有發(fā)生沖突,這樣B終于可以推送了,最后再在Github上Pull request一下,就是給主開發(fā)者A發(fā)送一個(gè)請(qǐng)求,請(qǐng)求合并項(xiàng)目,最后A看了一下B寫的功能,覺(jué)得挺不錯(cuò)的,然后同意了開發(fā)者A的request(merge),就這樣兩人愉快的協(xié)作著......
不熟悉Git命令的童鞋請(qǐng)看:Git的基本命令