1. 程式人生 > >git多人協作開發流程(以blog為例)

git多人協作開發流程(以blog為例)

時間倉促,能力有限,錯誤難免(程式碼沒有經過實際驗證,所以可能會有問題),歡迎指正 :)

這個開發流程就是基於a successful git model這篇文章而來的,如果對英文不感冒的話,我這有翻譯版

專案背景:

張三 / 李四 / 王五 打算共同協作,開發一套部落格系統

專案分工:

張三 / 李四 負責文章系統
王五負責評論系統

建立服務端倉庫

git雖然是分散式版本管理工具,但為了方便管理,我們需要建立一箇中心倉庫,先在服務端建立兩條分支

master
develop

master儲存穩定版(production ready),開發人員平時的程式碼都提交到develop分支上

開發者的Git分支

張三的Git分支

因為張三和李四同時開發文章系統,所以就有了下面的分支

# 張三的Git分支
article (local)
lisi/article (via git remote add lisi http://lisi-server/lisi.git)
origin/master (via git remote add origin http://remote-server/blog.git)
origin/develop

李四的Git分支

跟張三類似,不過article server變成了張三的

# 李四的Git分支
article (local)
zhangsan/article (via git remote add zhangsan http://zhangsan-server/zhangsan.git)
origin/master (via git remote add origin http://remote-server/blog.git) origin/develop

王五的Git分支

因為只有王五一個人開發評論系統,所以只要一條遠端分支就行了

# 王五的Git分支
comment (local)
origin/master (via git remote add origin http://remote-server/blog.git)
origin/develop

開發過程

張三和李四

假設張三負責文章的管理,及前端顯示。李四負責文章的分類和標籤系統。

張三開發完一部分後(n次本地commit),提交到本地的git server(也就是李四新增的http://zhangsan-server/zhangsan.git)。

李四開發完一部分後,因為要與張三開發的部分合並,所以需要執行一下rebase或merge

# 當前在article分支中
git rebase zhangsan/article
# 提交到本地的git server (也就是張三新增的http://lisi-server/lisi.git)git push local/article master

這時張三又開發完了一部分,他也會走跟李四一樣的流程,rebase & push (如果有衝突,解決之)。

假設由張三統一負責將每日的開發進度提交到remote develop分支上,張三在執行了上面所說的流程後,提交到服務端的develop分支。但這時很可能王五已經把他寫的程式碼提交了,所以要先執行一下rebase

git rebase origin/develop
git push origin develop

這樣張三和李四的程式碼就都提交到了服務端的develop分支上。王五那邊的流程也一樣,只是少了本地同步的過程。

開發完畢,進入測試階段

經過幾天的開發,各個功能都已基本完成,下面就要進入測試階段。具體做法是在服務端新新增一個分支,命名為release,所以這時服務端就有3個分支了

master
develop
release

三位同學都在本地新建一個branch,對應服務端的release分支

git checkout -b release origin/release

分別進行測試,如果發現問題,則執行pull & push

# 當前在release分支下
git pull origin release
git push origin develop

經過幾天的測試後,發現沒什麼問題了,就可以釋出穩定版了,假設為0.1

git checkout master
git rebase origin/release
git tag 0.1
git push origin master --tags

同時別忘了把release分支上的程式碼與develop分支合併,保證develop分支上不會有遺留的bug。(沒有找到如何直接merge兩個服務端branch的方法)

git checkout develop
git rebase origin/release
git push origin develop
# 刪除服務端的release分支
git push origin :release

接下來就可以繼續在develop分支上進行開發了。

新增新特性

部落格系統需要新增archives功能,這個功能的開發就交給了新來的趙六。此時,在服務端新開一個分支,命名為feature,這時服務端的分支就變成了這樣

master
develop
feature/archive

趙六也在本地建立一個archive分支,每天提交到服務端的feature/archive,趙六的Git分支是這樣的(不相關的服務端Git已省去)

master
archive
origin/feature/archive

等到這個feature開發完了,與服務端的develop分支執行一下rebase,然後再提交到服務端的develop,這樣部落格的archive功能就有了

git checkout archive
git rebase origin/feature/archive
git push origin feature/archive
# 如果要刪除服務端的feature/archive分支的話
git push origin :feature/archive

接下來的流程跟上面的一樣:開發完畢後,新建release分支,在那上面進行bug修復,修復完畢後,merge到服務端的master和develop

緊急修復漏洞

部落格出現了一個xss漏洞,需要儘快修復,這時新建一個hotfix分支(現在本地建,然後提交到服務端),然後對漏洞進行修復,修復完後,提交到服務端的master和develop

git checkout master
git pull origin master
git checkout -b hotfix
# 漏洞修復...
# 修復完後
git push origin hotfix
git checkout master
git rebase hotfix
git push origin master
git push origin develop

--EOF--

若無特別說明,本站文章均為原創,轉載請保留連結,謝謝