Git - 优雅地commit
Git不仅仅是储存代码,多人协同开发的工具。即使某个项目只有一个开发者,Git对他来说也至关重要。正确地使用Git,优雅地使用Git,对自己和他人都有重要的意义。基础就不多赘述了。
廖雪峰 & Git-Flow
何时commit
commit不能太频繁, 一个功能写到一半,或者新增的文件存在语法语法错误,甚至你的commit会导致整个项目编译失败。也不能太久commit一次,一个commit新增/修改了千行代码,合并分支时可能会出现百十个merge request。
总的来说,确保完成某个独立需求后即可提交,合理利用暂存区加快开发效率。
怎么写commit message
社区提出了很多规范,认可程度较高的是受Angular启发的约定式提交(conventional commit)。也衍生出了很多工具可以帮助开发者快速写出符合规范的message。使用统一的提交规范不仅可以提高其他开发者code review的效率,还可以自动构建CHANGELOG等
使用commitizen代替git commit
cz可以作为独立的命令行工具使用(详细的使用方法见文档),也可以集成在Node.js项目中
添加cz工具与约定式提交的adapter
$ yarn add commitizen cz-conventional-changelog -D
// package.json
...
"config": {
"commitizen": {
"path": "cz-conventional-changelog"
}
}
添加脚本方便使用
// package.json
...
"scripts": {
"commit": "git-cz"
}
接下来,只要使用项目命令commit
即可触发cz的commit trigger
$ yarn commit
# or
$ npm run commit
校验commit message
一次不符合规范的commit如果push至远程仓库,再想撤回会比较麻烦。为了防止开发者写(xia)错(xie), 我们还需要一个工具来校验。推荐commitlint和对应的约定式提交adapter(@commitlint/config-conventional).
$ yarn add @commitlint/config-conventional @commitlint/cli -D
// package.json
...
"commitlint":{
"extends": ["@commitlint/config-conventional"]
}
接下来只要将commitlint
命令添加至githook/commit-msg即可
使用哈士奇
$ yarn add husky -D
// package.json
{
"husky": {
"hooks": {
"commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
}
}
}
vue-cli@3.x创建的项目可以直接在package.json内配置githook
...
"gitHooks": {
"commit-msg": "commitlint -e $GIT_PARAMS",
},