一、問題
對于一個項(xiàng)目,如果需要多人協(xié)同開發(fā),大家都在原始倉庫中進(jìn)行修改提交,經(jīng)常會發(fā)生沖突,而且一不小心會把別人的代碼內(nèi)容覆蓋掉。為了避免這樣的問題,git提供了fork-merge request這樣的協(xié)同方式。
二、倉庫框架模型
- 首先git倉庫分為遠(yuǎn)端倉庫和本地倉庫分別對應(yīng)上圖的remote和local。
- source repository表示項(xiàng)目的原始倉庫內(nèi)容,一開始只創(chuàng)建了這一個倉庫,是大家進(jìn)行fork的起點(diǎn),也是用于構(gòu)建、發(fā)布的倉庫。
- 每個參與者在source repository的基礎(chǔ)上fork一個新的遠(yuǎn)程倉庫user repository,其內(nèi)容與當(dāng)前source repository相同,但是他是獨(dú)立出去的新倉庫,后續(xù)除非手動更新,否則不會隨著source repository同步。
- 通過git clone user repository命令,將user repository克隆到本地,也就是local repository。此時local repository只與user repository綁定,而與source repository沒有任何直接聯(lián)系。
并且通過git remote -v可以看到只有一個origin倉庫,關(guān)聯(lián)user repository的url。
- 之后再通過git remote add origin_src source repository,將source repository與local repository綁定,并設(shè)置名稱為origin_src(這里名稱可以隨便取,只要與原有的origin重復(fù)即可)。
再通過git remote -v可以看到除了origin倉庫外,還有有一個origin_src倉庫,關(guān)聯(lián)source repository的url。
至此,倉庫就搭建好了,可以在本地進(jìn)行開發(fā),后續(xù)進(jìn)行提交與合并。
三、開發(fā)、提交流程
3.1 提交與合并
- 在local repository開發(fā)完成后,通過git add和git commit命令完成本地倉庫的提交記錄。
- 然后通過git push origin master命令將local repository的master分支內(nèi)容推到user repository中。
- 然后再從瀏覽器進(jìn)入user repository,發(fā)起merge request,請求將user repository的master分支內(nèi)容合并到source repository的某個分支(如master)中。
而在發(fā)起這個請求后,并不會直接合并,而是處于待合并的狀態(tài),并且可以指定相關(guān)人員對合并內(nèi)容進(jìn)行審閱,確保合并代碼符合規(guī)范,并且不會對其他代碼造成影響。
除此之外,如果當(dāng)前內(nèi)容與source repository內(nèi)容存在沖突,則需要解決完沖突后才能合并。(需要再本地拉取source repository代碼,解決完沖突后重新提交到user repository中,如果之前的merge request沒有關(guān)閉,則會將當(dāng)前提交記錄更新到剛剛的merge request中,然后就可以合并了。)
- 當(dāng)審閱人員執(zhí)行合并后,你的提交記錄就會被合并到source repository啦。
3.2 更新代碼
前面提到我們本地的代碼都是直接推到user repository的,而且這個倉庫一般僅僅是你自己擁有,所以一般不需要從這個倉庫拉取代碼(如果需要則使用git pull origin branch).
通常需要拉取的是source repository的內(nèi)容,包含了其他人員提交的代碼內(nèi)容,拉取方式為:
git pull origin_src master
表示將origin_src倉庫(也就是source repository)的master分支拉取到本地的當(dāng)前分支下。master可以是任意分支名。
之后可以繼續(xù)在本地開發(fā),或者直接提交到user repository,用于同步source repository的內(nèi)容。
三、優(yōu)點(diǎn)
首先是前面提到的在提交merge request之后,有個待合并的狀態(tài),可以供他人審查。并且當(dāng)出現(xiàn)問題時可以關(guān)閉當(dāng)前請求,這是分支開發(fā)合并所不具備的。文章來源:http://www.zghlxwxcb.cn/news/detail-673733.html
其次是fork出來的user repository是完全獨(dú)立的,完全可以在其上開辟新分支、打標(biāo)簽等操作,而不影響source repository,使得source repository更加干凈。文章來源地址http://www.zghlxwxcb.cn/news/detail-673733.html
到了這里,關(guān)于git通過fork-merge request實(shí)現(xiàn)多人協(xié)同的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!