一、為什么需要規(guī)范?
無規(guī)矩不成方圓
如果你有一個(gè)項(xiàng)目團(tuán)隊(duì),從始至終都是自己寫,那么你想怎么寫都可以,沒有人可以干預(yù)你。可是如果在團(tuán)隊(duì)協(xié)作中,大家都張揚(yáng)個(gè)性,那么代碼將會是一團(tuán)糟,好好的項(xiàng)目就被槽踐,不管開發(fā)還是日后維護(hù),都將是災(zāi)難。
這時(shí)候,有人提出為何不同統(tǒng)一標(biāo)準(zhǔn),大家都按照這個(gè)標(biāo)準(zhǔn)來,于是Eslint,JSHint 等代碼工具如雨后春歲般涌現(xiàn),成為項(xiàng)目構(gòu)建的必備良品。
Git Commit規(guī)范可能并沒有那么夸張, 但如果你在版本回退的時(shí)候看到一大段糟心的
Commit,空拍會懊惱不已,所以嚴(yán)格遵守規(guī)則,利人利己。
具體規(guī)則
先看看公式
1 | <type>(<scope>): <subject>
-
type
-
用于說明Commit的類別,只允許使用下面7個(gè)標(biāo)識。
feat:新功能(feature) fix:修補(bǔ)bug docs:文檔(documentation) style: 格式(不影響代碼運(yùn)行的變動) refactor:重構(gòu)(即不是新增功能,也不是修改bug的代碼變動) test:增加測試 chore:構(gòu)建過程或輔助工具的變動
-
-
scope
- 用于說明 commit 影響的范圍,比如數(shù)據(jù)層、控制層、視圖層等等,視項(xiàng)目不同而不同。
-
subject
- 是 commit 目的的簡短描述,不超過50個(gè)字符。
1.以動詞開頭,使用第一人稱現(xiàn)在時(shí),比如change,而不是changed或changes 2.第一個(gè)字母小寫 3.結(jié)尾不加句號(.)
Commit 規(guī)范的作用
- 提供更多的信息,方便排查與回退
- 過濾關(guān)鍵字,迅速定位;
- 方便生成文檔;
生成 Change log
正如上文提到的生成文檔,如果我們的提交都按照規(guī)范的話,那就很簡單了。生成的文檔包括以下三個(gè)部分:
- New features
- Bug fixes
- Breaking changes.
每個(gè)部分都會羅列相關(guān)的 commit ,并且有指向這些 commit 的鏈接。當(dāng)然,生成的文檔允許手動修改,所以發(fā)布前,你還可以添加其他內(nèi)容。
這里需要使用工具 Conventional Changelog 生成 Change log :
npm install -g conventional-changelog
cd jartto-domo
conventional-changelog -p angular -i CHANGELOG.md -w
為了方便使用,可以將其寫入 package.json 的 scripts 字段。
{
"scripts": {
"changelog": "conventional-changelog -p angular -i CHANGELOG.md -w -r 0"
}
}
這樣,使用起來就很簡單了:
npm run changelog