最近在使用commitlint校驗提交git提交日誌的時候遇到點奇怪的問題,在這裡記錄下解決方案。
windows下使用預設命令“commitlint -e $GIT_PARAMS”校驗會報“GIT_PARAMS is not available globally”
這個問題的原因是windows的環境變數中沒有“GIT_PARAMS”,我換成windows下的環境變數形式“%GIT_PARAMS%”還是會報同樣的錯誤,應該是windows下的git或許根本就沒把當前提交的日誌資訊放入%GIT_PARAMS%。繼續google,發現了在.git目錄下有個COMMIT_EDITMSG檔案,開啟一看這個檔案儲存了最近一次提交的日誌資訊,於是把“commitlint -e $GIT_PARAMS”改為“commitlint -e .git/COMMIT_EDITMSG”,問題解決,這種寫法在windows和mac上都支援。
commitlint校驗失敗(type cannot be empty,message cannot be empty)
上面這個問題奇怪的地方就在於我明明寫了type和message的,google一番毫無結果之後我決定自己除錯下“commitlint -e $GIT_PARAMS”到底是怎麼校驗提交資訊的。於是按照vscode官方文件新增“Launch via NPM”如下:(關於vscode如何除錯的基礎資訊請自行參考vscode debugging)
// launch.json
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Launch via NPM",
"runtimeExecutable": "npm",
"runtimeArgs": [
"run-script",
"debug"
],
"port": 9229
}
]
}
複製程式碼
然後在專案的package.json新增debug指令碼
"scripts": {
"debug": "commitlint -e .git/COMMIT_EDITMSG"
},
複製程式碼
然後在commitlint原始碼上打上斷點,f5啟動除錯,納尼,沒啟動就直接退出了,什麼情況。繼續google,發現用node除錯單檔案需要新增--inspect引數,或者是--inspect-brk=port(port用來指定埠號)。這樣就簡單了,在node_modules的.bin目錄下找到commitlint.cmd檔案,進而找到commitlint的入口js檔案,找到之後將npm scripts修改如下
"scripts": {
"debug":"node --nolazy --inspect-brk=9229 ./node_modules/@commitlint/cli/lib/cli.js -e .git/COMMIT_EDITMSG",
}
複製程式碼
然後在cli.js中打上斷點,f5啟動除錯就行了。
經過除錯發現檢驗失敗是因為commitlint的匹配正則沒考慮到一些特殊字元,導致無法匹配,commitlint的匹配正則如下,可以看到中間部分並沒有包含所有字元,而我的提交資訊裡面恰恰用了一個“@”字元,可以說非常尷尬了。
^(\w*)(?:\(([\w$.\-* ]*)\))?: (.*)$
複製程式碼