從git官網咱們能夠知道Git commit做用是記錄對倉庫的修改node
在平常開發中,使用Git命令最多的應該就是Git commit ,然而書寫規範的commit message可以提升開發人員的代碼維護升級效率,在能快速方便排查問題。那麼commit message的規範就十分重要了git
目前使用比較多的規範是Angular規範,阿里、滴滴也有在使用。github
從Angular的的文檔能夠看到commit message的格式npm
<type>(<scope>): <subject> <body> // 主體,對提交進行詳細的描述<footer>複製代碼
由文檔可知有三部分,分別爲json
type類型有如下幾種:gulp
Commitizen是一款能生成標準規範的commit信息工具。性能優化
使用環境:node > 6.0 bash
儘管該工具兼容低版本node,但該工具是在node10.x和12.x的環境下測試的,因此使用環境最好是大於node6.0架構
Commitizen安裝ide
npm install -g commitizen
或本地安裝
npm install -save-dev commitizen複製代碼
cz-conventional-changelog 適配器安裝(可用腳本生成commit文檔)
npm install -g cz-conventional-changelog複製代碼
上一步安裝完後,須要在根目錄添加配置文件.zcrc
{ "path": "cz-conventional-changelog" }複製代碼
接下來執行commitizen命令,會自動在package.json中添加相應的配置
// 執行命令
commitizen init cz-conventional-changelog --save-dev --save-exact
或是使用yarn
commitizen init cz-conventional-changelog --yarn --dev --exact
//package.json自動生成以下
"config": {
"commitizen": {
"path": "cz-conventional-changelog"
}
}複製代碼
完成上述步驟咱們就能夠在提交代碼時用工具生成git commit模板,用git cz 命令 替換 git commit來使用。
因爲引入新的依賴,選擇build
依次下來填寫/選擇
從gitlab倉庫上面的commit記錄就能夠清楚的看到提交的信息
若是咱們git cz 選擇了有重大改變(breaking changes),會多一行關於重大改變的描述須要輸入
倉庫commit上也會多出一行BREAKING CHANGE描述
若是提交的代碼涉及到修復issues問題,那麼提交時能夠選擇是否影響到issues問題,此時須要輸入issues信息(e.g. "fix #123", "re #123".)
倉庫的提交記錄就會自動關聯上issues問題,點擊#1便可跳轉issues問題頁面。此時只是關聯,並不能改變倉庫issues問題的狀態,若是須要影響到問題的狀態,還須要安裝配置jira
若是咱們提交的commit都符合Angular格式,執行下列命令則能夠在根目錄生CHANGELOG.md。生成的文檔包含三個模塊:feature、bug、breaking change
// 此命令不會覆蓋以前的Change log,而是會在CHANGELOG.md頭部加上 上次發佈到如今的改動
conventional-changelog -p angular -i CHANGELOG.md -s複製代碼
若是要生成全部的change log,能夠執行下列命令
conventional-changelog -p angular -i CHANGELOG.md -w -r 0複製代碼
爲了不每次都輸入那麼長的命令行,能夠在package.json定義命令
// 生成上次發佈到如今的改動
npm run changelog
//生成全部改動
npm run allChangelog
複製代碼
生成的日誌文檔以下,哪一天修復新增改動了一目瞭然,還能夠直接連接到gitlab倉庫對應的commit-id
可是上面有個地方須要注意:在生成changelog日誌以前,須要用下面的命令更新一下package.json的版本號,若是不作這一步,會致使每次提交都會帶上以前重複的日誌
npm version 版本號複製代碼
有了commit規範就須要有校驗,那麼格式校驗須要用到commitlint、husky
commitlint:用以配置commit message的格式
husky: 是一個git hook的管理工具,實現了大部分的git hook(git命令的鉤子)
運行環境:Node >= 8.6.0 和 Git >= 2.13.0.
// commitlint安裝
npm install --save-dev @commitlint/{cli,config-conventional}
//建立commitlint配置文件
echo "module.exports = {extends: ['@commitlint/config-angular']};" > commitlint.config.js
//Husky安裝
npm install --save-dev husky
//在package.json添加husky配置,與script平級
"husky": {
"hooks": {
"commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
}
}複製代碼
測試
若是不符合規範的commit提交,commit會被攔截
符合校驗的commit message則會被經過提交