程序員最煩的幾件事:寫測試,變量命名,還有填代碼提交信息(commit message)。翻幾個開源項目遍立刻能夠回味那做文湊字數的青春時光。javascript
其實 commit message 的做用遠不止如此,通過簡單的配置即可無痛成爲代碼提交的文明公民。java
最起碼的一點,項目的提交歷史是其餘人(包括將來的本身)瞭解項目的一個重要途徑。好的提交歷史能夠方便其餘人蔘與進來,也能夠方便本身快速定位問題。git
此外,提交信息還能夠用來觸發 CI 構建,自動生成 CHANGELOG ,版本自動語義化提高…… 只須要一點點配置就能夠幹這麼多,真是懶人必備。程序員
跟 Code Style 同樣,Commit Message 也有各類風格。若是沒什麼特殊癖好推薦用基於 Angular ,
後獨立開來的 Conventional Commits 風格。
它也基本是各個工具的默認配置,因此搭配起來不須要折騰。github
雖然規則很少,但不必定能隨時記住,特別是對新人,必需要有友好的方式提交。npm
commitizen 是一個很好的選擇,經過命令行回答幾個問題便可填完信息,減輕了記憶負擔。
它是一個通用的工具,經過插件方式支持各類風格。咱們選擇 Conventional 須要安裝
cz-conventional-changelog 。json
npm install --save-dev commitizen cz-conventional-changelog
而後配置 package.json
就能夠經過 npm run commit
提交。svg
{ "scripts": { "commit": "git-cz" } }
另外 VSCode 用戶也能夠用 vscode-commitizen ,
經過 ctrl+shift+p
或 command+shift+p
提交。工具
沒錯,Commit Message 也有 Linter ,可對 Commit Message 進行檢驗,杜絕打字手殘和渾水摸魚。測試
這裏用 commitlint 配合 husky 實現自動檢測。
commitlint 也是通用的工具,須要同時安裝風格配置。 husky 能夠方便使用 git hooks ,在 commit 時觸發 commitlint 。
npm install --save-dev @commitlint/cli @commitlint/config-conventional husky
項目根新建 commitlint.config.js
module.exports = { extends: ['@commitlint/config-conventional'] }
配置 package.json
{ "husky": { "hooks": { "commit-msg": "commitlint -E HUSKY_GIT_PARAMS" } }, }
最後安裝 standard-version 實現自動生成 CHANGELOG 和版本自動語義化提高。
npm install --save-dev standard-version
配置 package.json
{ "scripts": { "release": "standard-version" } }
第一次發佈時能夠用如下命令重置
npm run release -- --first-release
之後直接 npm run release
便可。
也能夠手動指定版本:
# npm run script npm run release -- --release-as minor # Or npm run release -- --release-as 1.1.0
在 README 中加入小徽章可方便其餘人瞭解風格。
[![Commitizen friendly](https://img.shields.io/badge/commitizen-friendly-brightgreen.svg?maxAge=2592000)](http://commitizen.github.io/cz-cli/) [![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-brightgreen.svg?maxAge=2592000)](https://conventionalcommits.org)
安裝
npm install --save-dev commitizen cz-conventional-changelog @commitlint/cli @commitlint/config-conventional husky standard-version
配置 package.json
{ "scripts": { "commit": "git-cz", "release": "standard-version" }, "husky": { "hooks": { "commit-msg": "commitlint -E HUSKY_GIT_PARAMS" } }, }
項目根新建 commitlint.config.js
module.exports = { extends: ['@commitlint/config-conventional'] }
【完】