git commit規範化
項目中,每次使用git提交代碼時都需要填寫提交信息,每個人填寫提交信息的風格都不一樣,爲了保持項目中git commit一致性,就需要對git commit進行規範化處理,規範的git commit 可以讓項目的提交信息整潔明瞭,也可以讓我們通過提交信息可以清晰的知道本次提交的內容,出現問題時也可以更快速的查詢問題,如果項目需要生成changelog日誌,規範的git commit可以讓我們使用工具快速生成changelog日誌
目前git commit 規範使用最多的是按照Angular團隊使用的規範,提交信息都包括三個部分:Header,Body 和 Footer,如下:
<type>(<scope>): <subject>
// 空一行
<body>
// 空一行
<footer>
其中,Header 是必需的,Body 和 Footer 可以省略。
項目中使用:
1、安裝commitizen
依賴
npm install --save-dev commitizen
使用commitizen
的命令是git-cz
,如果我們全局安裝commitizen
,就可以直接在項目中使用git-cz
命令,否則需要使用npx git-cz
來執行,爲了以後使用方便,我們可以在package.json
的scripts
中進行如下配置:
// package.json
{
"scripts": {
...
"commit": "git-cz",
...
}
}
這樣我們就可以通過在命令行工具中使用npm run commit
來使用commitizen
2、commitizen
需要配合着適配器使用,安裝cz-conventional-changelog
依賴,可以讓我們自己項目的git提交信息符合Angular團隊的規範
npm install --save-dev cz-conventional-changelog
在package.json
文件中配置cz-conventional-changelog
的使用:
// package.json
{
...
"config": {
"commitizen": {
"path": "node_modules/cz-conventional-changelog"
},
}
...
}
此時,在提交代碼時,我們就可以通過npm run commit
命令按照Angular團隊的規範來提交信息。但是由於沒有進行強制校驗,如果還是按照以往使用git commit -m <提交信息>
提交任何風格的信息也是可以的,爲了保證提交信息規範性,使用husky
、commitlint
對提交信息進行強制校驗,其中commitlint
用於校驗提交信息是否符合規範,使用husky
的commit-msg
鉤子可以讓我們在每次提交信息前觸發commitlint
校驗。
3、信息校驗時除了安裝@commitlint/cli
和husky
外,還要按照需要遵循的規則,我們繼續使用Angular團隊信息提交規範,安裝@commitlint/config-conventional
;
npm install --save-dev @commitlint/config-conventional @commitlint/cli
npm install --save-dev husky
然後在package.json
中配置commitlint
和husky
如下:
// package.json
{
...
"commitlint": {
"extends": [
"@commitlint/config-conventional"
]
},
"husky": {
"hooks": {
"commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
}
}
...
}
husky
可以在我們執行git commit
調用commitlint
對提交信息進行格式校驗,校驗失敗則提交失敗,只有校驗成功才能提交
至此,git commit
規範化已完成,我們可以使用npm run commit
採用問答交互式的方法創建git commit
,也可以自行按照規範進行git commit
提交。
可能遇到的問題:
1、安裝之後,git commit
時husky
校驗提交信息不生效
解決辦法:git版本太低,升級git版本可解決,husky
要求的git版本最低2.13.2
2、在執行npm run commit
在git中出現交互式界面時,上下選擇不生效(針對windows用戶)
解決辦法:在C盤》用戶》自己名字 目錄下找到.bashrc文件,在文件中添加alias npm='winpty npm.cmd'
,保存即可
參考文獻:
[1] 優雅的提交你的 Git Commit Message
[2] Commit message 和 Change log 編寫指南