要求對git
的message
作限制,要求要以html
['feat', 'fix', 'docs', 'style', 'refactor', 'perf', 'test', 'build', 'ci', 'revert', 'types']
:vue
作開頭標記git
git
存在hook
,在每一個步驟後面都會執行對應的🪝github
所以咱們能夠考慮經過git hook
去完成這項校驗npm
實際上,在平時的開發過程當中,就已經有於此相關的內容了,就是不知道同窗們留意到沒有json
好比在Vue
項目中,若是在建立項目中,選擇了eslint
,並選擇了保存並格式化bash
在進行git commit
時,代碼會自動作一次格式化。markdown
究其緣由,其實是來自Vue
的默認配置app
那麼Vue
是怎麼作的,實際上,翻開文檔,咱們可以找到相關內容ide
其實是尤🌧️溪 fork 了 husky
,稍作改造造成了yorkie
可是咱們能夠看到,yorkie
已經好久沒有更新了,而且沒有文檔,想要直接使用yorkie
是比較困難的
所以咱們回到最初的庫,husky
husky
自己也是一個久負盛名的庫,專一於git hook
那麼就讓咱們來集成它,完成咱們的需求
npx husky-init && npm install # npm
npx husky-init && yarn # Yarn 1
yarn dlx husky-init --yarn2 && yarn # Yarn 2
複製代碼
集成之後,項目依賴會添加husky
,且項目根目錄下會添加.husky
文件夾
.husky
文件夾下,默認添加了一個pre-commit
的hook
文件
咱們能夠先將Vue
的默認配置轉移進去
pre-commit
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
npm run lint
git add .
複製代碼
而後移除package.json
中的gitHooks
屬性
npx husky add [fileName]
# 若是沒有其餘config上的變更,能夠理解爲照着以下寫法寫
# npx husky add .husky/hooks名稱
複製代碼
舉個🌰
npx husky add .husky/commit-msg
複製代碼
可能有些旁友不知道有哪些hook能夠添加,我這裏教你們怎麼看
直接查看.git
文件夾中hooks內容
commit-msg
npx husky add .husky/commit-msg
複製代碼
commit-msg
內容:
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
MSG=`awk '{printf("%s",$0)}' $1`
echo $MSG
if [[ $MSG =~ ^(feat|fix|docs|style|refactor|perf|test|build|ci|revert|types):.*$ ]]
then
echo '成功'
else
echo '失敗'
fi
複製代碼
由於上述行爲的hook是在項目中作的
換句話說是在開發成員的本地電腦上作的
一旦開發人員不爽,把hook刪了,那就無從約束
因此更保險的方式,應該是由git平臺上去作檢測
能夠在hook文件的最後添加
exit 1
複製代碼
會停止本次git行爲
commitlint
,見名知意,commit內容的lint
咱們能夠使用其中的風格和工具作拓展
好比咱們這裏選擇集成以下工具和風格
@commitlint/cli
@commitlint/config-conventional
複製代碼
若是須要達成上述需求,咱們能夠這麼作
commitlint.config.js
文件module.exports = {
extends: ['@commitlint/config-conventional'],
rules: {
'type-enum': [
2,
'always',
['feat', 'fix', 'docs', 'style', 'refactor', 'perf', 'test', 'build', 'ci', 'revert', 'types'],
],
},
}
複製代碼
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
npx commitlint --edit $1
複製代碼