同一個工程項目,爲了方便管理,git 的 commit 信息最好按照必定的格式規範,以便在須要的時候方便使用。什麼是方便的時候,好比出現了一個線上 bug,因此須要回滾操做,知道了提交信息能夠方便的定位問題。代碼 review 的時候也知道了該次 commit 幹了什麼,因此 commit 標準化好處不少,再也不舉例。node
能夠立刻想到的是利用 shell 結合 git hook 實如今 git commit 階段檢查輸入是否符合規範。符合就經過,不符合就終止,並給出提示信息。webpack
常見的分類有下面幾種:git
在 github 上有 commitlint 這個項目,它能夠很方便的在工程中作配置,並容許你自定義上面說的「規範」、「分類」。github
commitlint:用於檢查提交信息 husky:hook 工具,用於 git-commit 和 git-push 階段。web
怎麼用?shell
npm init -y
npm install --save-dev @commitlint/config-conventional @commitlint/cli husky
commitlint.config.js
。const types = [
'build',
'ci',
'chore',
'docs',
'feat',
'fix',
'pref',
'refactor',
'revert',
'style',
'test'
];
typeEnum = {
rules: {
'type-enum': [2, 'always', types]
},
value: () => types
}
module.exports = {
extends: [
"@commitlint/config-conventional"
],
rules: {
'type-case': [0],
'type-empty': [0],
'scope-empty': [0],
'scope-case': [0],
'subject-full-stop': [0, 'never'],
'subject-case': [0, 'never'],
'header-max-length': [0, 'always', 72],
'type-enum': typeEnum.rules['type-enum']
}
};
複製代碼
"husky": {
"hooks": {
"pre-commit": "echo '哈嘍,小夥伴們,在這裏能夠作測試相關的邏輯哦,通常結合公司的 ci'",
"commit-msg": "commitlint -E HUSKY_GIT_PARAMS",
"pre-push": "echo 提交代碼前須要先進行單元測試 && 能夠作測試相關"
}
}
複製代碼
上面的流程配置完成,當你在提交 commit 信息的輸入的內容,若是不符合 <type>: <subject>
規則,會終止並給出提示信息。npm
type 就是上面的種類;subject 就是須要提交的文字歸納。好比:feature:增長搖一搖推薦酒店功能。json
小說明:若是某次提交想禁用 husky,能夠添加參數 --no-verify。git commit --no-verify -m "xxx"
xcode
貼個效果圖工具
安裝包 husky 的時候,會在目錄 .git/hooks/
下生成一堆 shell 腳本,負責 git 的 hook。
"commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
這個配置告訴 git hooks,當執行 git commit -m
的時候觸發 commit-msg 鉤子,並通知 husky,從而執行 commitlint -E HUSKY_GIT_PARAMS
,實際上執行的是 ./node_modules/husky/bin/run.js
,讀取 commitlint.config.js 裏的配置,而後對咱們 commit -m 裏的字符串校驗,如不經過則輸出錯誤信息並終止。
git commit 的幾個鉤子,也暴露出來了,因此能夠結合時機作一些額外的邏輯。
因此基於上述時機,能夠根據項目特色作一些別的事情。好比 code lint、unit test 代碼覆蓋率檢測、changelog 自動生成、unit test 腳本等、也能夠藉此機會產生 lint 報表