1.分支管理
1.1 總覽
從上圖可以看到主要包含下面幾個分支:
-
master
: 主分支,主要用來版本發布。 -
develop
:日常開發分支,該分支正常保存了開發的最新代碼。 -
feature
:從develop分支fork,合并回develop。具體的功能開發分支。 -
release
:從develop分支fork,合并回develop和master。一般用于發布正式版本之前(即合并到 master 分支之前),需要有的預發布的版本進行測試。 -
hotfix
:從master分支fork,合并回develop和master。線上 bug 修復分支。
1.2 主分支(master, develop)
主分支包括 master 分支和 develop 分支。master 分支用來發布,HEAD 就是當前線上的運行代碼。develop 分支就是我們的日常開發。使用這兩個分支就具有了最簡單的開發模式:develop 分支用來開發功能,開發完成并且測試沒有問題則將 develop 分支的代碼合并到 master 分支并發布。
1.3 輔助分支(feature , release, hotfix)
??? feature 分支用來開發具體的功能,一般 fork 自 develop 分支,最終可能會合并到 develop 分支。一般feature分支都存在于開發者本地,開發期間使用git rebase來保證和develop分支的代碼同步并解決沖突。功能開發完畢后push到遠程倉庫,然后提交pull request,合并到develop分支。
??? release 分支在我看來是 pre-master。release 分支從 develop 分支 fork 出來,最終會合并到 develop 分支和 master 分支。合并到 master 分支上就是可以發布的代碼了。有人可能會問那為什么合并回 develop 分支呢?很簡單,有了 release 分支,那么相關的代碼修復就只會在 release 分支上改動了,最后必然要合并到 develop 分支。比如,當開發一個較長期的feature不著急上線但又需要部署測試時,可以從develop分出一個release分支,feature提交pull request到這個release分支,然后部署這個release分支到測試服。
??? hotfix 分支用來修復線上 bug。當線上代碼出現 bug 時,我們基于 master 分支開一個 hotfix 分支,修復 bug 之后再將 hotfix 分支合并到 master 分支并進行發布,同時 develop 分支作為最新最全的代碼分支,hotfix 分支也需要合并到 develop 分支上去。
1.4 分支命名
除了主要分支的名字是固定的之外,派生分支是需要自己命名的,這里就要有個命名規范了。強烈推薦用如下形式:
- master 主分支,發布分支
- dev 主分支,開發分支
- feat_xxx——按照功能點(而不是需求)命名;
- release_xxx——用發布時間命名,可以加上適當的前綴;
- hotfix_xxx——GitLab 的 issue 編號或 bug 性質等。
小寫字母下劃線形式
1.5 版本號命名
格式為:x.y.z,其中,x 用于有重大重構時才會升級,y 用于有新的特性發布時才會升級,z 用于修改了某個 bug 后才會升級。
v1.1.1:第一位大版本號,大功能發布時增加,技術負責人審核;第二位小版本號,增加小特性時增加,主開發審核;第三位BUG修復號,修復BUG用,修復人員負責。
- 每次發布生產(master),需要為master打一個tag,方便線上回滾
- 提交時的粒度是一個小功能點或者一個 bug fix,這樣進行恢復等的操作時能夠將「誤傷」減到最低;
- 用一句簡練的話寫在第一行,然后空一行稍微詳細闡述該提交所增加或修改的地方;
- 不要每提交一次就推送一次,多積攢幾個提交后一次性推送,這樣可以避免在進行一次提交后發現代碼中還有小錯誤。
1.6 Commit Message 格式
<type>(<scope>): <subject> (不超過50個字)
<空行>
<body> (每行不超過72個字)
<空行>
<footer>
type
feat:新功能(feature)
fix:修補bug
mod:修改(即不是新增功能,也不是修改bug的代碼變動)
refactor:重構
docs:文檔(documentation)
style: 格式(不影響代碼運行的變動)
test:增加測試
chore:構建過程或輔助工具的變動Scope
用來說明本次Commit影響的范圍,即簡要說明修改會涉及的部分。這個本來是選填項,但從AngularJS實際項目中可以看出基本上也成了必填項了。Subject
用來簡要描述本次改動,概述就好了,因為后面還會在Body里給出具體信息。并且最好遵循下面三條:
1、 以動詞開頭,使用第一人稱現在時,比如change,而不是changed或changes
2、首字母不要大寫
2、結尾不用句號(.)Body
里的內容是對上面subject里內容的展開,在此做更加詳盡的描述,內容里應該包含修改動機和修改前后的對比。Footer
footer里的主要放置不兼容變更和Issue關閉的信息Revert
此外如果需要撤銷之前的Commit,那么本次Commit Message中必須以revert:開頭,后面緊跟前面描述的Header部分,格式不變。并且,Body部分的格式也是固定的,必須要記錄撤銷前Commit的SHA值。
示例
feat: 增加港股經紀商隊列
增加港股經紀商隊列接口和后臺名稱編輯接口
增加同時獲取買賣盤和經紀商的接口
BREAKING CHANGE: 刪除了舊版十檔買賣盤接口