如今,大部分項目都是用 git 來管理代碼的,但當項目變大、多人協做時,git 的使用就變得複雜了,這時就須要在 git 使用的流程上來思考如何更優的使用 git。html
對於大部分 web 項目而言,並不像軟件、APP 項目同樣有版本的劃分,而是不斷的更新、迭代,這就使得 web 項目的 git 使用要複雜一些,須要管理好哪些是正在開發的代碼、哪些是提交測試的代碼、哪些是已經上線的代碼、多人共同開發時如何避免代碼衝突與線上新代碼被舊代碼覆蓋等等。前端
若是項目比較小,不頻繁更新時,能夠只用 master
一個分支。java
使用流程:git
master
分支,並推送到遠程 master
分支上傳到服務器有兩種方式:github
若是項目稍大些,頻繁更新時,就須要另一個開發分支:web
master
:主分支,對應線上代碼dev
:開發分支,對應開發代碼使用流程:後端
dev
分支merge
到本地 master
分支,並推送到遠程 master
分支若是是多人蔘與的項目,就須要我的開發分支了:服務器
master
:主分支,對應線上代碼man1
:我的 man1
開發分支man2
:我的 man2
開發分支使用流程:測試
man1
分支(以 man1
我的爲例)merge
到本地 master
分支,並推送到遠程 master
分支(有可能須要先 pull
遠程的代碼)在適當的時候,每個我的分支(如 man1, man2
)都須要 pull
一下 master
分支,以保證本身本地的代碼的版本不會低於服務器。code
若是項目比較大,而且對應多個服務器環境(測試環境、產品環境):
master
:主分支prod
:產品分支,對應產品服務器環境test
:測試分支,對應測試服務器環境dev
:開發分支使用流程:
構建測試環境:
dev
分支merge
到本地 test
分支,並推送到遠程 test
分支構建產品環境能夠由遠程的 test
分支 merge
到遠程 prod
分支進行持續集成構建,也可由本地 dev
或 test
分支 merge
到本地 prod
分支,並推送到遠程 prod
分支進行持續集成構建。
若是是多人蔘與的項目,就須要我的開發分支了:
master
:主分支prod
:產品分支,對應產品服務器環境test
:測試分支,對應測試服務器環境man1
:我的 man1
開發分支man2
:我的 man2
開發分支使用流程:
構建測試環境:
man1
分支(以 man1
我的爲例)merge
到本地 test
分支,並推送到遠程 test
分支(有可能須要先 pull
遠程的代碼)構建產品環境能夠由遠程的 test
分支 merge
到遠程 prod
分支進行持續集成構建,也可由本地 man1
或 test
分支 merge
到本地 prod
分支,並推送到遠程 prod
分支進行持續集成構建。
在適當的時候,每個我的分支(如 man1, man2
)都須要 pull
一下 prod
分支(若有須要,也能夠 pull
test
分支),以保證本身本地的代碼的版本不會低於服務器。
有時候會有多個需求同時開發,而且相互獨立,爲了避免影響每一個需求的測試與上線,須要爲每一個需求建立一個分支。
master
:主分支prod
:產品分支,對應產品服務器環境test
:測試分支,對應測試服務器環境man1
:我的 man1
開發分支man2
:我的 man2
開發分支task1
:需求 task1
開發分支task2
:需求 task2
開發分支使用流程:
構建測試環境與以前的步驟一致,但構建產品環境時,爲了保證各個需求不相互影響,通常由本地直接合併到 prod
分支:
task1
分支 merge
到本地 prod
分支,並推送到遠程 prod
分支進行持續集成構建man1, man2
)都須要 pull
一下 prod
分支,以保證本身本地的代碼的版本不會低於服務器task1
分支由於不一樣分支修改同一個文件而致使的文件衝突是多人協做開發中比較常見的問題之一,避免這種問題的思路主要有如下的幾種:
有一些經常使用的分支,可能咱們會用到:
bug
分支:用於緊急修復產品環境的 bug
上面的圖例只有測試服務器和產品服務器,更多服務器類型的工做流程是相似的;圖例也只有 man1
和 man2
兩個我的分支,更多我的分支的工做流程也是相似的。
上面的圖例主要用於如下特色的項目(須要把整個項目打包成一個總體):
這樣作主要是爲了不一些問題:
push
到 test
分支作持續集成構建,很難保證線上新代碼不會被舊代碼覆蓋對於像下面這種特色的項目,能夠根據狀況調整、簡化流程:
好比:
master
:主分支man1
:我的 man1
開發分支man2
:我的 man2
開發分支task1
:需求 task1
開發分支task2
:需求 task2
開發分支使用流程:
若是多個需求沒有衝突,能夠同時在 man1
我的分支上開發,並根據須要上傳到不一樣的服務器。
若是多個需求有衝突,能夠每一個需求都新建一個分支,如上圖所示:
task1
分支(以 task1
我的爲例)task1
分支