1.集中式工做流git
適用人羣:開發小團隊(4-5人),習慣使用SVN工具的小團隊。分佈式
工做方式:團隊組長建立遠程倉庫,建立一個master分支,組員可讀可寫。工具
每一個開發人員都git clone遠程倉庫到本地倉庫,在master分支上開發。性能
每次開發都要git pull更新到遠程倉庫的master分支版本。測試
每次開發完成就git commit到本地倉庫, 接着git push到遠程倉庫。spa
缺點:忘了git push,一直會提交到本地倉庫,沒有推送到遠程倉庫。開發
忘了git pull,致使本地倉庫與中央倉庫不一致,發生文件衝突。同步
大量操做git pull,致使增長git分支合併次數,增長了git變基次數,下降了git的性能。工作流
2.分支工做流it
適用人羣:開發中團隊(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獲取從項目維護者的遠程倉庫的推送。
主項目維護者進行從項目維護者的遠程倉庫代碼審查,測試。
主項目維護者確認無誤後,能夠直接合併到主項目維護者的遠程倉庫。