1.兩人協(xié)同
以主角A和B為例,
- A著手開(kāi)發(fā)test庫(kù)全蝶,并用git管理;
- A邀請(qǐng)B參與test庫(kù)寺枉;
- B通過(guò)克隆局域網(wǎng)中的A的test庫(kù)
B> cd work
B> git clone A@192.168.0.7:~/work/test test
git-clone可利用各種網(wǎng)絡(luò)協(xié)議訪問(wèn)遠(yuǎn)端機(jī)器中的Git倉(cāng)庫(kù),從中導(dǎo)出完整的工作樹(shù)到本地抑淫。
B通過(guò)SSH協(xié)議訪問(wèn)了A機(jī)器上的A賬戶的test倉(cāng)庫(kù)并進(jìn)行導(dǎo)出,從而在當(dāng)前目錄下建立了test工作樹(shù),克隆的倉(cāng)庫(kù)名默認(rèn)原倉(cāng)庫(kù)名,所以最后一個(gè)test可以省略姥闪。
如遠(yuǎn)端倉(cāng)庫(kù)地址 match 賬戶@IP:工作樹(shù)路徑 git clone使用SSH協(xié)議始苇。
- A、B各自對(duì)各自機(jī)器上的test倉(cāng)庫(kù)進(jìn)行修改筐喳、提交催式。
- 當(dāng)需要合并時(shí),一般在主要開(kāi)發(fā)者A機(jī)器上進(jìn)行合并避归,(但同一項(xiàng)目的不同倉(cāng)庫(kù)地位均等)荣月。A需要合并B的工作,執(zhí)行以下git pull:
> cd ~/work/test
> git pull B@192.168.0.5:~/work/test
在A的test倉(cāng)庫(kù)中完成對(duì)B機(jī)器上的test倉(cāng)庫(kù)的合并梳毙。
git-pull命令可將屬于同一項(xiàng)目的遠(yuǎn)端倉(cāng)庫(kù)與同樣屬于同一項(xiàng)目的本地倉(cāng)庫(kù)進(jìn)行合并.它包含了兩個(gè)操作:
1).從遠(yuǎn)端倉(cāng)庫(kù)中取出更新版本
2).然后合并到本地倉(cāng)庫(kù)哺窄。
如果A與B是對(duì)了不同的文件進(jìn)行了改動(dòng),那么可以不費(fèi)周折地完成倉(cāng)庫(kù)合并顿天。但是倘若二人對(duì)一些相同的文件進(jìn)行了改動(dòng)堂氯,那么在合并時(shí)必然會(huì)遭遇合并沖突的問(wèn)題,此時(shí)手動(dòng)修改發(fā)生合并沖突的文件牌废,然后將結(jié)果提交到本地倉(cāng)庫(kù)咽白。
2.解決沖突
雖然A與B是對(duì)同一份文件進(jìn)行了修改,但是他們的修改并未重疊∧衤疲現(xiàn)在假設(shè)二人對(duì)同一文件的同一行做出了修改晶框,那么在倉(cāng)庫(kù)合并時(shí)會(huì)發(fā)生沖突,舉個(gè)栗子懂从,初始foo.txt如下:
one
two
three
A將foo文件的第一行改為大寫(xiě)授段,B在foo文件第一行加了大寫(xiě),發(fā)生沖突番甩,合并之后的foo文件如下:
<<<<<<< HEAD:foo
ONE
=======
one ONE
>>>>>>> 1116d3270764d91a25532a753a47b8b0e1b6f1b8:foo
two
three
以一串<+HEAD開(kāi)頭和一串>+版本號(hào)結(jié)束的字串表示沖突部分侵贵,而正文第一行ONE表示A的修改結(jié)果,中間用了一串=號(hào)將二人修改結(jié)果隔開(kāi)缘薛,后面一行表示B的當(dāng)前項(xiàng)目版本對(duì)foo.txt的修改結(jié)果窍育。
而后主研A可根據(jù)現(xiàn)實(shí)情況將沖突解決掉卡睦,即修改沖突部分,手動(dòng)選擇保留哪一個(gè)結(jié)果漱抓,并刪除其他部分表锻,最后將合并處理結(jié)果提交到倉(cāng)庫(kù)。
3.多人協(xié)同
若還有C乞娄、D加入這個(gè)項(xiàng)目瞬逊,他們也需要克隆一份項(xiàng)目倉(cāng)庫(kù),然后修改提交仪或,最后由A一一取回BCD三人的倉(cāng)庫(kù)确镊,在合并完成一個(gè)協(xié)同周期。這樣導(dǎo)致A的合并處理負(fù)擔(dān)太重范删,可以分?jǐn)偟狡渌恕?br> Git提供了git-pull的對(duì)偶命令:git-push骚腥。git-pull命令負(fù)責(zé)從遠(yuǎn)端倉(cāng)庫(kù)取回版本更新,而git-push可將本地版本更新推送到遠(yuǎn)端倉(cāng)庫(kù)中瓶逃。
BCD的工作流程
$ git clone A@192.168.0.7:~/work/test
...項(xiàng)目開(kāi)發(fā)...
$ git add改動(dòng)的文件
$ git commit
$ git pull
...解決版本合并問(wèn)題...
$ git push
BCD等人需要克隆一份束铭,然后進(jìn)行開(kāi)發(fā)和本地版本管理,然后從A(或服務(wù)器)取得團(tuán)隊(duì)最新版本厢绝,然后與本地的進(jìn)行合并契沫,最后推送到A(服務(wù)器)。
4.多人協(xié)同優(yōu)化
上個(gè)栗子中昔汉,A是個(gè)項(xiàng)目參與人懈万,但與其他人員又具有相當(dāng)大差距,因?yàn)锳的電腦起到了服務(wù)器的匯總功能靶病,所以他不需要pull或者push会通,這樣的特權(quán)不合理。這里的方案是將匯總的倉(cāng)庫(kù)建立在另外的服務(wù)器上娄周。