以Blog為例闡述Git多人協作開發流程
項目背景:
張三 / 李四 / 王五 打算共同協作,開發一套博客系統
項目分工:
張三 / 李四 負責文章系統 王五負責評論系統
建立服務端倉庫
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
原文地址:http://blog.leezhong.com/tech/2011/02/25/git-workflow-with-blog-demo.html