摘要:項(xiàng)目如何進(jìn)行多人協(xié)作開(kāi)發(fā)聲明本文不介紹的基本用法,需要讀者對(duì)命令使用有一定的了解現(xiàn)在,大部分項(xiàng)目都是用來(lái)管理代碼的,但當(dāng)項(xiàng)目變大多人協(xié)作時(shí),的使用就變得復(fù)雜了,這時(shí)就需要在使用的流程上來(lái)思考如何更優(yōu)的使用。
web 項(xiàng)目如何進(jìn)行 git 多人協(xié)作開(kāi)發(fā)
聲明:本文不介紹 git 的基本用法,需要讀者對(duì) git、git 命令、git 使用有一定的了解
現(xiàn)在,大部分項(xiàng)目都是用 git 來(lái)管理代碼的,但當(dāng)項(xiàng)目變大、多人協(xié)作時(shí),git 的使用就變得復(fù)雜了,這時(shí)就需要在 git 使用的流程上來(lái)思考如何更優(yōu)的使用 git。
對(duì)于大部分 web 項(xiàng)目而言,并不像軟件、APP 項(xiàng)目一樣有版本的劃分,而是不斷的更新、迭代,這就使得 web 項(xiàng)目的 git 使用要復(fù)雜一些,需要管理好哪些是正在開(kāi)發(fā)的代碼、哪些是提交測(cè)試的代碼、哪些是已經(jīng)上線的代碼、多人共同開(kāi)發(fā)時(shí)如何避免代碼沖突與線上新代碼被舊代碼覆蓋等等。
1. 一個(gè)分支如果項(xiàng)目比較小,不頻繁更新時(shí),可以只用 master 一個(gè)分支。
使用流程:
提交代碼到本地 master 分支,并推送到遠(yuǎn)程 master 分支
持續(xù)集成構(gòu)建或本地構(gòu)建,然后上傳到服務(wù)器
上傳到服務(wù)器有兩種方式:
持續(xù)集成構(gòu)建,然后同步到服務(wù)器
本地構(gòu)建,然后上傳到服務(wù)器(為了簡(jiǎn)潔清晰,后面的圖例中會(huì)隱藏這種方式)
2. 開(kāi)發(fā)分支與個(gè)人分支如果項(xiàng)目稍大些,頻繁更新時(shí),就需要另外一個(gè)開(kāi)發(fā)分支:
master:主分支,對(duì)應(yīng)線上代碼
dev:開(kāi)發(fā)分支,對(duì)應(yīng)開(kāi)發(fā)代碼
使用流程:
提交代碼到本地 dev 分支
在需要構(gòu)建項(xiàng)目時(shí) merge 到本地 master 分支,并推送到遠(yuǎn)程 master 分支
持續(xù)集成構(gòu)建,然后同步到服務(wù)器
如果是多人參與的項(xiàng)目,就需要個(gè)人開(kāi)發(fā)分支了:
master:主分支,對(duì)應(yīng)線上代碼
man1:個(gè)人 man1 開(kāi)發(fā)分支
man2:個(gè)人 man2 開(kāi)發(fā)分支
使用流程:
提交代碼到本地 man1 分支(以 man1 個(gè)人為例)
在需要構(gòu)建項(xiàng)目時(shí) merge 到本地 master 分支,并推送到遠(yuǎn)程 master 分支(有可能需要先 pull 遠(yuǎn)程的代碼)
持續(xù)集成構(gòu)建,然后同步到服務(wù)器
在適當(dāng)?shù)臅r(shí)候,每一個(gè)個(gè)人分支(如 man1, man2)都需要 pull 一下 master 分支,以保證自己本地的代碼的版本不會(huì)低于服務(wù)器。
3. 多個(gè)服務(wù)器環(huán)境如果項(xiàng)目比較大,并且對(duì)應(yīng)多個(gè)服務(wù)器環(huán)境(測(cè)試環(huán)境、產(chǎn)品環(huán)境):
master:主分支
prod:產(chǎn)品分支,對(duì)應(yīng)產(chǎn)品服務(wù)器環(huán)境
test:測(cè)試分支,對(duì)應(yīng)測(cè)試服務(wù)器環(huán)境
dev:開(kāi)發(fā)分支
使用流程:
構(gòu)建測(cè)試環(huán)境:
提交代碼到本地 dev 分支
在需要構(gòu)建項(xiàng)目時(shí) merge 到本地 test 分支,并推送到遠(yuǎn)程 test 分支
持續(xù)集成構(gòu)建,然后同步到測(cè)試服務(wù)器
構(gòu)建產(chǎn)品環(huán)境可以由遠(yuǎn)程的 test 分支 merge 到遠(yuǎn)程 prod 分支進(jìn)行持續(xù)集成構(gòu)建,也可由本地 dev 或 test 分支 merge 到本地 prod 分支,并推送到遠(yuǎn)程 prod 分支進(jìn)行持續(xù)集成構(gòu)建。
如果是多人參與的項(xiàng)目,就需要個(gè)人開(kāi)發(fā)分支了:
master:主分支
prod:產(chǎn)品分支,對(duì)應(yīng)產(chǎn)品服務(wù)器環(huán)境
test:測(cè)試分支,對(duì)應(yīng)測(cè)試服務(wù)器環(huán)境
man1:個(gè)人 man1 開(kāi)發(fā)分支
man2:個(gè)人 man2 開(kāi)發(fā)分支
使用流程:
構(gòu)建測(cè)試環(huán)境:
提交代碼到本地 man1 分支(以 man1 個(gè)人為例)
在需要構(gòu)建項(xiàng)目時(shí) merge 到本地 test 分支,并推送到遠(yuǎn)程 test 分支(有可能需要先 pull 遠(yuǎn)程的代碼)
持續(xù)集成構(gòu)建,然后同步到測(cè)試服務(wù)器
構(gòu)建產(chǎn)品環(huán)境可以由遠(yuǎn)程的 test 分支 merge 到遠(yuǎn)程 prod 分支進(jìn)行持續(xù)集成構(gòu)建,也可由本地 man1 或 test 分支 merge 到本地 prod 分支,并推送到遠(yuǎn)程 prod 分支進(jìn)行持續(xù)集成構(gòu)建。
在適當(dāng)?shù)臅r(shí)候,每一個(gè)個(gè)人分支(如 man1, man2)都需要 pull 一下 prod 分支(如有需要,也可以 pull test 分支),以保證自己本地的代碼的版本不會(huì)低于服務(wù)器。
4. 多個(gè)需求同時(shí)開(kāi)發(fā)有時(shí)候會(huì)有多個(gè)需求同時(shí)開(kāi)發(fā),并且相互獨(dú)立,為了不影響每個(gè)需求的測(cè)試與上線,需要為每個(gè)需求創(chuàng)建一個(gè)分支。
master:主分支
prod:產(chǎn)品分支,對(duì)應(yīng)產(chǎn)品服務(wù)器環(huán)境
test:測(cè)試分支,對(duì)應(yīng)測(cè)試服務(wù)器環(huán)境
man1:個(gè)人 man1 開(kāi)發(fā)分支
man2:個(gè)人 man2 開(kāi)發(fā)分支
task1:需求 task1 開(kāi)發(fā)分支
task2:需求 task2 開(kāi)發(fā)分支
使用流程:
構(gòu)建測(cè)試環(huán)境與之前的步驟一致,但構(gòu)建產(chǎn)品環(huán)境時(shí),為了保證各個(gè)需求不相互影響,一般由本地直接合并到 prod 分支:
本地 task1 分支 merge 到本地 prod 分支,并推送到遠(yuǎn)程 prod 分支進(jìn)行持續(xù)集成構(gòu)建
每一個(gè)個(gè)人分支(如 man1, man2)都需要 pull 一下 prod 分支,以保證自己本地的代碼的版本不會(huì)低于服務(wù)器
最后刪除 task1 分支
5. 多人協(xié)作開(kāi)發(fā)修改公共文件因?yàn)椴煌种薷耐粋€(gè)文件而導(dǎo)致的文件沖突是多人協(xié)作開(kāi)發(fā)中比較常見(jiàn)的問(wèn)題之一,避免這種問(wèn)題的思路主要有以下的幾種:
在代碼層面,盡量避免多個(gè)成員都會(huì)改動(dòng)的文件,盡量將代碼分解到每個(gè)人只負(fù)責(zé)自己的那塊代碼,不需要去改別人的代碼
在工程層面,盡量減少公共文件,盡量每個(gè)文件只由一個(gè)人負(fù)責(zé)
在 git 層面,如果有必要,可以多帶帶建一個(gè)分支,用于更新某些公共文件,并及時(shí)的更新到其他分支
6. 其他分支有一些常用的分支,可能我們會(huì)用到:
bug 分支:用于緊急修復(fù)產(chǎn)品環(huán)境的 bug
7. 根據(jù)情況調(diào)整、簡(jiǎn)化流程上面的圖例只有測(cè)試服務(wù)器和產(chǎn)品服務(wù)器,更多服務(wù)器類(lèi)型的工作流程是類(lèi)似的;圖例也只有 man1 和 man2 兩個(gè)個(gè)人分支,更多個(gè)人分支的工作流程也是類(lèi)似的。
上面的圖例主要用于以下特點(diǎn)的項(xiàng)目(需要把整個(gè)項(xiàng)目打包成一個(gè)整體):
單頁(yè)面 web 前端應(yīng)用,整個(gè)項(xiàng)目只有一個(gè) html 文件,頁(yè)面之間的切換由本地路由控制,每次更新到服務(wù)器都需要打包所有頁(yè)面
Java、Go 等后端應(yīng)用,每次都需要打包成一個(gè)整體,可能是一個(gè)文件,或者一批文件(不打包成一個(gè)整體的方式除外,比如分散 java class 文件)
使用持續(xù)集成構(gòu)建的方式更新代碼到服務(wù)器
這樣做主要是為了避免一些問(wèn)題:
線上新代碼被舊代碼覆蓋:多人同時(shí)開(kāi)發(fā)項(xiàng)目,都需要更新到測(cè)試機(jī),如果不是統(tǒng)一 push 到 test 分支做持續(xù)集成構(gòu)建,很難保證線上新代碼不會(huì)被舊代碼覆蓋
未測(cè)試的代碼被更新到產(chǎn)品環(huán)境:這個(gè)問(wèn)題也需要注意,因?yàn)檫@個(gè)問(wèn)題并不能從流程上完全杜絕,需要各位在開(kāi)發(fā)中留意
對(duì)于像下面這種特點(diǎn)的項(xiàng)目,可以根據(jù)情況調(diào)整、簡(jiǎn)化流程:
多頁(yè)面 web 前端應(yīng)用,把某一個(gè)頁(yè)面更新到服務(wù)器并不影響其他頁(yè)面
NodeJs、PHP、Python 等后端應(yīng)用,只上傳自己更新的文件,而不影響服務(wù)器上其他文件(把所有代碼打包成一個(gè)整體的方式除外)
使用本地構(gòu)建的方式更新代碼到服務(wù)器
比如:
master:主分支
man1:個(gè)人 man1 開(kāi)發(fā)分支
man2:個(gè)人 man2 開(kāi)發(fā)分支
task1:需求 task1 開(kāi)發(fā)分支
task2:需求 task2 開(kāi)發(fā)分支
使用流程:
如果多個(gè)需求沒(méi)有沖突,可以同時(shí)在 man1 個(gè)人分支上開(kāi)發(fā),并根據(jù)需要上傳到不同的服務(wù)器。
如果多個(gè)需求有沖突,可以每個(gè)需求都新建一個(gè)分支,如上圖所示:
提交代碼到本地 task1 分支(以 task1 個(gè)人為例)
根據(jù)需要上傳到不同的服務(wù)器
如果代碼通過(guò)產(chǎn)品環(huán)境后,更新到每個(gè)個(gè)人分支,并刪除 task1 分支
這樣子,就簡(jiǎn)單很多了。
后續(xù)更多博客,查看 https://github.com/senntyou/blogs
作者:深予之 (@senntyou)
版權(quán)聲明:自由轉(zhuǎn)載-非商用-非衍生-保持署名(創(chuàng)意共享3.0許可證)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/73280.html
摘要:項(xiàng)目如何進(jìn)行多人協(xié)作開(kāi)發(fā)聲明本文不介紹的基本用法,需要讀者對(duì)命令使用有一定的了解現(xiàn)在,大部分項(xiàng)目都是用來(lái)管理代碼的,但當(dāng)項(xiàng)目變大多人協(xié)作時(shí),的使用就變得復(fù)雜了,這時(shí)就需要在使用的流程上來(lái)思考如何更優(yōu)的使用。 web 項(xiàng)目如何進(jìn)行 git 多人協(xié)作開(kāi)發(fā) 聲明:本文不介紹 git 的基本用法,需要讀者對(duì) git、git 命令、git 使用有一定的了解 現(xiàn)在,大部分項(xiàng)目都是用 git 來(lái)管理...
摘要:項(xiàng)目如何進(jìn)行多人協(xié)作開(kāi)發(fā)聲明本文不介紹的基本用法,需要讀者對(duì)命令使用有一定的了解現(xiàn)在,大部分項(xiàng)目都是用來(lái)管理代碼的,但當(dāng)項(xiàng)目變大多人協(xié)作時(shí),的使用就變得復(fù)雜了,這時(shí)就需要在使用的流程上來(lái)思考如何更優(yōu)的使用。 web 項(xiàng)目如何進(jìn)行 git 多人協(xié)作開(kāi)發(fā) 聲明:本文不介紹 git 的基本用法,需要讀者對(duì) git、git 命令、git 使用有一定的了解 現(xiàn)在,大部分項(xiàng)目都是用 git 來(lái)管理...
摘要:引言本周精讀的文章是。精讀總的來(lái)說(shuō),雖然拆分子倉(cāng)庫(kù)拆分子包是進(jìn)行項(xiàng)目隔離的天然方案,但當(dāng)倉(cāng)庫(kù)內(nèi)容出現(xiàn)關(guān)聯(lián)時(shí),沒(méi)有任何一種調(diào)試方式比源碼放在一起更高效。前端精讀幫你篩選靠譜的內(nèi)容。 1. 引言 本周精讀的文章是 The many Benefits of Using a Monorepo。 現(xiàn)在介紹 Monorepo 的文章很多,可以分為如下幾類(lèi):直接介紹 Lerna API 的;介紹如何...
摘要:詳解及實(shí)用指南之一本地操作詳解及實(shí)用指南之二遠(yuǎn)程操作創(chuàng)建與合并分支利用分支就可以實(shí)現(xiàn)多人開(kāi)發(fā)的偉大模式,從而提高生產(chǎn)效率。分支默認(rèn)情況下,是一條線,利用指向最新的提交,再用批向就能確定當(dāng)前分支以及當(dāng)前分支的提交點(diǎn)。 1. git 詳解及實(shí)用指南之一 (本地操作) 2. git 詳解及實(shí)用指南之二 (遠(yuǎn)程操作) 1.創(chuàng)建與合并分支 利用分支就可以實(shí)現(xiàn)多人開(kāi)發(fā)的偉大模式,從而提高生產(chǎn)效率。...
摘要:詳解及實(shí)用指南之一本地操作詳解及實(shí)用指南之二遠(yuǎn)程操作創(chuàng)建與合并分支利用分支就可以實(shí)現(xiàn)多人開(kāi)發(fā)的偉大模式,從而提高生產(chǎn)效率。分支默認(rèn)情況下,是一條線,利用指向最新的提交,再用批向就能確定當(dāng)前分支以及當(dāng)前分支的提交點(diǎn)。 1. git 詳解及實(shí)用指南之一 (本地操作) 2. git 詳解及實(shí)用指南之二 (遠(yuǎn)程操作) 1.創(chuàng)建與合并分支 利用分支就可以實(shí)現(xiàn)多人開(kāi)發(fā)的偉大模式,從而提高生產(chǎn)效率。...
閱讀 3960·2021-11-24 09:38
閱讀 1225·2021-10-19 11:42
閱讀 1829·2021-10-14 09:42
閱讀 2153·2019-08-30 15:44
閱讀 544·2019-08-30 14:04
閱讀 2888·2019-08-30 13:13
閱讀 1949·2019-08-30 12:51
閱讀 955·2019-08-30 11:22