本文定位於爲使用GIT標準分支開發流程的開發團隊新人提供一份參考指南,其中的內容都是咱們公司在研發團隊初創時所遵循的一些開發流程標準,通過近一年的實踐,雖然說還有不少不足,可是隨着團隊經驗的豐富和人員的擴張,我會適時地更新本文,分享咱們在使用GIT開發流程中遇到的問題和解決方案。html
本文將會持續修正和更新,最新內容請參考個人 GITHUB 上的 程序猿成長計劃 項目,歡迎 Star,更多精彩內容請 follow me。git
項目中長期存在的兩個分支github
master
:主分支,負責記錄上線版本的迭代,該分支代碼與線上代碼是徹底一致的。vim
develop
:開發分支,該分支記錄相對穩定的版本,全部的feature分支和bugfix分支都從該分支建立。windows
其它分支爲短時間分支,其完成功能開發以後須要刪除併發
feature/*
:特性(功能)分支,用於開發新的功能,不一樣的功能建立不一樣的功能分支,功能分支開發完成並自測經過以後,須要合併到 develop 分支,以後刪除該分支。學習
bugfix/*
:bug修復分支,用於修復不緊急的bug,普通bug均須要建立bugfix分支開發,開發完成自測沒問題後合併到 develop 分支後,刪除該分支。測試
release/*
:發佈分支,用於代碼上線準備,該分支從develop分支建立,建立以後由測試同窗發佈到測試環境進行測試,測試過程當中發現bug須要開發人員在該release分支上進行bug修復,全部bug修復完後,在上線以前,須要合併該release分支到master分支和develop分支。spa
hotfix/*
:緊急bug修復分支,該分支只有在緊急狀況下使用,從master分支建立,用於緊急修復線上bug,修復完成後,須要合併該分支到master分支以便上線,同時須要再合併到develop分支。插件
團隊中的 Git 實踐
Git 在團隊中的最佳實踐--如何正確使用Git Flow
功能分支的分支名稱應該爲可以準確描述該功能的英文簡要表述
feature/分支名稱
例如,開發的功能爲 新增商品到物料庫,則能夠建立名稱爲 feature/material-add
的分支。
bug修復分支的分支名稱能夠爲Jira中bug代碼或者是描述該bug的英文簡稱
bugfix/分支名稱 hotfix/分支名稱
好比,修復的bug在jira中代號爲MATERIAL-1,則能夠建立一個名爲bugfix/MATERIAL-1
的分支。
release分支爲預發佈分支,命名爲本次發佈的主要功能英文簡稱
release/分支名稱
好比,本次上線物料庫新增的功能,則分支名稱能夠爲release/material-add
。
基本命令這裏就很少說了,基本跟之前同樣,惟一的區別是注意分支是從哪裏拉去的以及分支的命名規範。涉及到的命令主要包含如下,你們本身學習:
git commit
git add [--all]
git push
git pull
git branch [-d]
git merge
git cherry-pick
git checkout [-b] BRANCH_NAME
git stash
分支操做參考 Git經常使用操做-分支管理
git flow
簡化操做git flow
是git的一個插件,能夠極大程度的簡化執行git標準分支流程的操做,能夠在gitflow-avh安裝。
若是是windows下經過安裝包安裝的git,則該插件默認已經包含,能夠直接使用。
使用git flow init
初始化項目
$ git flow init Which branch should be used for bringing forth production releases? - develop - feature-fulltext - feature-vender - master Branch name for production releases: [master] Which branch should be used for integration of the "next release"? - develop - feature-fulltext - feature-vender Branch name for "next release" development: [develop] How to name your supporting branch prefixes? Feature branches? [feature/] Bugfix branches? [bugfix/] Release branches? [release/] Hotfix branches? [hotfix/] Support branches? [support/] Version tag prefix? [] Hooks and filters directory? [/Users/mylxsw/codes/work/e-business-3.0/.git/hooks]
git flow feature git flow feature start <name> git flow feature finish <name> git flow feature delete <name> git flow feature publish <name> git flow feature track <name>
功能分支使用例子:
$ git flow feature start material-add Switched to a new branch 'feature/material-add' Summary of actions: - A new branch 'feature/material-add' was created, based on 'develop' - You are now on branch 'feature/material-add' Now, start committing on your feature. When done, use: git flow feature finish material-add $ git status On branch feature/material-add nothing to commit, working directory clean $ git flow feature publish Total 0 (delta 0), reused 0 (delta 0) To http://dev.oss.yunsom.cn:801/yunsom/e-business-3.0.git * [new branch] feature/material-add -> feature/material-add Branch feature/material-add set up to track remote branch feature/material-add from origin. Already on 'feature/material-add' Your branch is up-to-date with 'origin/feature/material-add'. Summary of actions: - The remote branch 'feature/material-add' was created or updated - The local branch 'feature/material-add' was configured to track the remote branch - You are now on branch 'feature/material-add' $ vim README.md $ git add --all $ git commit -m "modify readme file " [feature/material-add 7235bd4] modify readme file 1 file changed, 1 insertion(+), 2 deletions(-) $ git push Counting objects: 3, done. Delta compression using up to 4 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 303 bytes | 0 bytes/s, done. Total 3 (delta 2), reused 0 (delta 0) To http://dev.oss.yunsom.cn:801/yunsom/e-business-3.0.git 0d4fb8f..7235bd4 feature/material-add -> feature/material-add $ git flow feature finish Switched to branch 'develop' Your branch is up-to-date with 'origin/develop'. Updating 0d4fb8f..7235bd4 Fast-forward README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) To http://dev.oss.yunsom.cn:801/yunsom/e-business-3.0.git - [deleted] feature/material-add Deleted branch feature/material-add (was 7235bd4). Summary of actions: - The feature branch 'feature/material-add' was merged into 'develop' - Feature branch 'feature/material-add' has been locally deleted; it has been remotely deleted from 'origin' - You are now on branch 'develop' $ git branch * develop feature-fulltext feature-vender master
git flow release git flow release start <release> [<base>] git flow release finish <release> git flow release delete <release>
git flow hotfix git flow hotfix start <release> [<base>] git flow hotfix finish <release> git flow hotfix delete <release>
若是上面內容太多記不住,也沒有關係,做爲開發人員,剛開始的時候只要知道如下幾點就足夠了,其它的能夠在碰到的時候再深刻學習:
全部的新功能開發,bug修復(非緊急)都要從develop
分支拉取新的分支進行開發,開發完成自測沒有問題再合併到develop
分支
release
分支發佈到測試環境,由開發人員建立release
分支(須要測試人員提出需求)併發布到測試環境,若是測試過程當中發現bug,須要開發人員track
到該release分支修復bug,上線前須要測試人員提交merge request
到master
分支,準備上線,同時須要合併回develop
分支。
只有緊急狀況下才容許從master
上拉取hotfix
分支,hotfix
分支須要最終同時合併到develop
和master
分支(共兩次merge操做)
除了master
和develop
分支,其它分支在開發完成後都要刪除
本文將會持續修正和更新,最新內容請參考個人 GITHUB 上的 程序猿成長計劃 項目,歡迎 Star,更多精彩內容請 follow me。