TL;DR:
? commitizen 使用
? commitlint 使用
? 可以直接抄走的配置
? git cz 的原理
規範 commit msg 的意義
規範化、格式化的 commit message 可以讓我們更好的追蹤需求的演進、回滾時能夠快速的找到提交、最次也能讓我們的倉庫顯的更專業。
團隊如何規範 commit msg呢,靠宣講、靠文件?當然得靠工具生成和約束。前端圈輪子那麼多,這種工具不在話下。
- commitizen 問答式生成 commit msg 格式化
- commitlint 校驗卡控 commit msg 規範化
commitizen
commitizen: simple commit conventions for internet citizens.
commitizen/cz-cli 藉助它提供的 git cz 命令替代 git commit 命令,生成符合規範的 commit message。
commitizen 預設的提交規範是 angular 團隊強規定的,若想自定義我們還需配合 Adapter(介面卡)此處我們用cz-customizable
。下面我們直接來介紹專案級配置。
進行 commitizen 配置
執行 npm install -D commitizen
、npm install -D cz-customizable
命令
然後在 package.json檔案中 scripts 和 config 欄位進行配置
{
"scripts": {
"commit": "cz"
},
"config": {
"commitizen": {
"path": "./node_modules/cz-customizable"
},
"cz-customizable": {
"config": ".cz-configrc.js"
}
}
}
新增 .cz-configrc.js檔案,可參考 cz-demo
在專案的根目錄下執行 npm run commit
試試吧
後續t npm run commit
替換 git commit
commitlint
如何保證組內成員都使用npm run commit
命令呢?當然是用工具。
這裡我們用 commitlint,作用和 eslint 類似。利用 git hooks 攔截不符合規範的 commit msg。
安裝依賴
npm install --save-dev @commitlint/{config-conventional,cli}
npm install yorkie --save-dev
新增 .commitlint.config.js 檔案
擴充套件開源配置,然後再新增部分個性化 rules
參考配置
如果你和我一樣對 Applicable always|never: never inverts the rule.
很迷惑請閱讀連結
配置 git hooks
為了攔截不規範的 commit msg,需要利用 git hooks 的 commit-msg
自動執行 commitlint
"gitHooks": {
"commit-msg": "commitlint -e $GIT_PARAMS"
}
亂輸入一個 commit msg 試試,發現非常神奇。卡控生效了
按照以上步驟就可以規範你們團隊的 commit msg了。
總結一下:
step 1: 安裝依賴
npm install -D commitizen cz-customizable
npm install -D @commitlint/{config-conventional,cli}
npm install -D yorkie
step 2: 新增配置檔案
自定義格式的commitizen配置檔案 .cz-configrc.js ,校驗規範的 .commitlint.config.js 檔案
step 2: 配置 package.json
{
"scripts": {
"commit": "cz"
},
"config": {
"commitizen": {
"path": "./node_modules/cz-customizable"
},
"cz-customizable": {
"config": ".cz-configrc.js"
}
},
"gitHooks": {
"commit-msg": "commitlint -e $GIT_PARAMS"
}
}
git cz 的原理
如果你是全域性按照的 commitizen,你還能用 git cz
命令代替 npm run commit
。
git cz
是什麼玩意? git 的命令,還 commitizen 的命令。2臉懵逼 ???
通過查閱資料 git cz 是 commitizen 利用 git 的檔案命名規範生成的自定義 git 命令。cz-cli/issues
Git遵循命名約定git-<subcmd>
自動解析PATH中可執行檔案中的子命令。 這些子命令可以用git <subcmd>
執行。
我們看下 commitizen 倉庫 package.json 的 bin 欄位。真香大白了,就是 git 的自定義命令
"bin": {
"cz": "./bin/git-cz",
"git-cz": "./bin/git-cz",
"commitizen": "./bin/commitizen"
},
最後
參考這個 demo 倉庫將你的程式碼庫武裝起來吧