1.集中式工作流
適用人群:開發小團隊(4-5人),習慣使用SVN工具的小團隊。
工作方式:團隊組長創建遠程倉庫,創建一個master分支,組員可讀可寫。
每個開發人員都git clone遠程倉庫到本地倉庫,在master分支上開發。
每次開發都要git pull更新到遠程倉庫的master分支版本。
每次開發完成就git commit到本地倉庫, 接着git push到遠程倉庫。
缺點:忘了git push,一直會提交到本地倉庫,沒有推送到遠程倉庫。
忘了git pull,導致本地倉庫與中央倉庫不一致,發生文件沖突。
大量操作git pull,導致增加git分支合並次數,增加了git變基次數,降低了git的性能。
2.分支工作流
適用人群:開發中團隊(10人以上,100人以下),熟悉Git分支的團隊。
工作方式:團隊組長創建遠程倉庫,創建一個master分支,組員可讀不可寫。
每個開發人員都git clone遠程倉庫到本地倉庫。
每個開發人員創建自己的feature分支,在feature分支上開發。(記住,feature分支是基於master分支)
每個開發人員每次開發完成就git commit到本地倉庫中自己的feature分支, 接着git push到遠程倉庫。
通過pull request提醒團隊組長,瀏覽組員提交feature分支。
組長把feature分支拉下來並合並到自己本地倉庫的master分支上測試。
組長測試feature分支通過之后,由組長負責把feature分支合並到遠程倉庫的master分支上。
組長在遠程倉庫把合並過的feature分支刪除。
組員在本地倉庫把合並過的feature分支刪除。
組員將本地倉庫分支切換為master分支,然后git pull將本地倉庫的master分支更新到遠程倉庫的master分支版本。
缺點:增加團隊組長的工作量。
增加團隊組員提交步驟。
PS:Pull Request作用是可以讓其他組員或組長可以查看你的代碼,並可以提出代碼修改意見或者討論。
3.Gitflow工作流(多分支工作流)
適用人群:開發團隊(100人以上),熟悉Git分支的團隊。
工作方式:項目維護者創建項目維護者的遠程倉庫,創建master分支與develop分支,貢獻者可讀不可寫。
每個貢獻者git clone遠程倉庫中的develop分支到本地倉庫。(記住,develop分支相當於master的分支,包括功能開發,修改,測試。master分支相當於最終分支)
每個貢獻者在本地倉庫創建自己的feature分支,在feature分支上開發。
在feature分支又可以創建多個feature分支,繼續開發項目。
每個貢獻者每次開發完成就git commit到本地倉庫中自己的feature分支, 接着git push到遠程倉庫。
通過pull request提醒項目維護者,瀏覽貢獻者提交feature分支。
項目維護者把feature分支拉下來並合並到自己本地倉庫的develop分支上測試。
組長測試feature分支通過之后,由組長負責把feature分支合並到遠程倉庫的develop分支上。
項目維護者會release分支上git tag打上版本號。
項目維護者可以從develop分支創建release分支,接着把release分支合並到master分支上,同時master分支同步到develop分支。
項目維護者在遠程倉庫把合並過的feature分支刪除。
每個貢獻者在本地倉庫把合並過的feature分支刪除。
每個貢獻者將本地倉庫分支切換為develop分支,然后git pull將本地倉庫的master分支更新到遠程倉庫的develop分支版本。
PS:Gitflow工作流是Vincent Driessen工程師提出的多分支工作流。
4.分叉工作流(分布式倉庫工作流)
適用人群:開發團隊(1000以上),熟悉Git分支的團隊。
工作方式:主項目維護者創建主項目維護者的遠程倉庫,創建一個master分支,從項目維護者可讀不可寫。
從項目維護者通過fork主項目維護者的遠程倉庫的副本到自己的遠程倉庫,包括master分支。(記住,從項目維護者的遠程倉庫獨立於主項目維護者的遠程倉庫)
從項目維護者git clone主項目維護者的遠程倉庫的副本到本地倉庫。
從項目維護者創建自己的feature分支,在feature分支上開發。
從項目維護者每次開發完成就git commit到本地倉庫中自己的feature分支, 接着git push到遠程倉庫。
通過pull request從項目維護者合並自己feature分支到從項目維護者的遠程倉庫的master分支上。
從項目維護者在遠程倉庫把合並過的feature分支刪除。
從項目維護者在本地倉庫把合並過的feature分支刪除。
從項目維護者在遠程倉庫通過pull request向主項目維護者的遠程倉庫的推送。
主項目維護者通過pull request獲取從項目維護者的遠程倉庫的推送。
主項目維護者進行從項目維護者的遠程倉庫代碼審查,測試。
主項目維護者確認無誤后,可以直接合並到主項目維護者的遠程倉庫。
