逛Github看到那些優(yōu)秀項(xiàng)目美觀、清晰的change log就很好奇怎么做到,直到……………………
commit格式介紹
美觀、清晰的change log只要自己在commit的時(shí)候好好寫就差不多了,但是在多人協(xié)作項(xiàng)目中就難以統(tǒng)一。如果有一個(gè)設(shè)計(jì)優(yōu)秀、還有自動(dòng)化工具支持的規(guī)范,那就再好不過了。
約定式提交正是這么一個(gè)規(guī)范,具體的內(nèi)容請?zhí)D(zhuǎn)到頁面上閱讀,內(nèi)容不多,很簡單。
通過git hook實(shí)現(xiàn)commit時(shí)檢查格式
規(guī)范這東西,如非自覺,真是很難堅(jiān)持。因此,有必要通過一些手段來強(qiáng)制去遵守。因此本文的重點(diǎn)就是搭建一個(gè)環(huán)境,讓我們在commit時(shí)能自動(dòng)的檢查commit內(nèi)容是否符合了上面的規(guī)范,并指出是哪些地方的問題。
首先,到Node.js官網(wǎng)下載并安裝該環(huán)境(務(wù)必下載最新版,否則后續(xù)有命令執(zhí)行會(huì)失敗),安裝時(shí)一路保持默認(rèn)。安裝結(jié)束在命令行窗口檢查是否安裝成功!

后續(xù)的所有操作都在項(xiàng)目的根目錄執(zhí)行?。?!在項(xiàng)目根目錄右鍵選擇Git bash here進(jìn)行操作。
創(chuàng)建package.json文件
執(zhí)行npm init -y創(chuàng)建默認(rèn)參數(shù)的package.json文件,不帶-y則可以跟著提示一步步自定義各個(gè)參數(shù),這里用默認(rèn)的就夠了。


安裝commitlint
執(zhí)行npm install --save-dev @commitlint/config-conventional @commitlint/cli,安裝commitlint并下載commit風(fēng)格文件,這里是@commitlint/config-conventional。還有別的規(guī)范文件,可以到github去看看哪個(gè)適合自己,當(dāng)然也可以自定義。點(diǎn)這里
過去。

接著執(zhí)行
echo "module.exports = {extends: ['@commitlint/config-conventional']}" > commitlint.config.js創(chuàng)建風(fēng)格指定文件。前面是下載,可以下載多個(gè),通過配置文件指定使用其中一個(gè),這里我就是用啥就只下載啥了。
執(zhí)行完這兩個(gè)指令,根目錄下就會(huì)多了三個(gè)東西

安裝husky
commitlint安裝完就可以檢測commit message是否符合規(guī)范了,不過是手動(dòng)檢查,明顯不適合我這個(gè)懶人。所以需要再安裝一個(gè)工具讓git hook能在commit時(shí)觸發(fā)去檢查并給出錯(cuò)誤信息。
- 執(zhí)行
npm install husky --save-dev命令,安裝husky - 執(zhí)行
npx husky install激活鉤子 - 執(zhí)行
npx husky add .husky/commit-msg 'npx --no-install commitlint --edit "$1"',添加commit-msg鉤子
測試
如圖所示,不符合規(guī)范的commit信息會(huì)提示出錯(cuò),并且指出了錯(cuò)誤的地方。
一鍵執(zhí)行腳本
新建txt文件,復(fù)制下面的內(nèi)容進(jìn)去,保存后將文件后綴改為.bat。將該批處理文件放到項(xiàng)目倉庫根目錄,雙擊執(zhí)行,打完收工!
if not exist .git echo Please create a git repository first! & pause
call npm init -y
call npm install --save-dev @commitlint/config-conventional @commitlint/cli
echo module.exports = {extends: ['@commitlint/config-conventional']} > commitlint.config.js
call npm install husky --save-dev
call npx husky install
::call npx husky add .husky/commit-msg 'npx --no-install commitlint --edit "$1"'
echo #!/bin/sh > .husky\commit-msg
echo . "$(dirname "$0")/_/husky.sh" >> .husky\commit-msg
echo. >> .husky\commit-msg
echo npx --no-install commitlint --edit "$1" >> .husky\commit-msg
pause


