如何让 git commit
提交时更加规范?例如:vue、angular,如下图。规范化地提交记录,会让将来的回溯查找更容易,也让其他人阅读起来更加简便。
最近读到一篇不错的文章(你可能已经忽略的 git commit 规范),吸取下养分,顺便做个记录。文章介绍得很清楚,建议阅读原文,不做额外赘述,以下为集成到项目的快速指南。
快速开始
使用到的工具 commitizen、husky、gitmoji-cli,cz-conventional-changelog 是 angular 的 commit message 格式。
所有包不推荐 global 安装,而仅项目本地安装,方便多人开发时,减少其他人的额外操作。
-
安装工具
yarn add commitizen cz-conventional-changelog -D
-
在项目根目录的 package.json 中添加配置
{ "scripts": { "commit": "git-cz" }, "config": { "commitizen": { "path": "./node_modules/cz-conventional-changelog" } } }
官方推荐的是 global 安装 commitizen,然后执行
commitizen init cz-conventional-changelog --yarn --dev --exact
去自动添加 cz-conventional-changelog,自动在 package.json 中添加 config 配置,不太推荐这种方式。 -
使用
-
git commit
仍然是普通的 git 提交模式 -
yarn commit
会执行交互式 commit 提交,在终端跟着提示一步步输入即可。
-
-
限制每一次
git commit
都执行交互式提交如果想要更暴力一点,限制每一次
git commit
都自动执行规范化地提交,可以配置 git 提交的钩子,借助 husky 更方便一点(不用 husky 当然也可以)。安装 husky
yarn add husky -D
在 package.json 中增加配置
限制了每一次
git commit
都触发,那么 scripts 中配置的 commit 命令就可以删除了。{ "husky": { "hooks": { "prepare-commit-msg": "exec < /dev/tty && git cz --hook || true" } }, }
有些时候可能不太需要所有的 commit 都执行交互式的提交流程,因此,推荐不要这么暴力限制。
为什么执行
exec < /dev/tty
?默认情况下,git钩子不是交互式的。该命令允许用户在挂机期间使用其终端与Commitizen进行交互。
在提交中支持表情符号
如果想要在提交中使用一些表情符号,如下图:
在提交时按照约定格式输入表情字符即可(左右两边英文冒号夹着字符,例如bug ☞ :bug:
),提交后会自动被显示(无需安装 gitmoji-cli 等工具),示例:
git commit -m "fix(src): :bug: 修复列表显示问题"
如果想要查看所有的表情符号及介绍,可以去官方文档查阅。
常见的 commit 类型
- feat: 新增feature
- fix: 修复bug
- docs: 仅仅修改了文档,如readme.md
- style: 仅仅是对格式进行修改,如逗号、缩进、空格等。不改变代码逻辑。
- refactor: 代码重构,没有新增功能或修复bug
- perf: 优化相关,如提升性能、用户体验等。
- test: 测试用例,包括单元测试、集成测试。
- chore: 改变构建流程、或者增加依赖库、工具等。
- revert: 版本回滚
自己手写 commit 的推荐写法
如果通过简单的 git commit -m "" 提交,你大概可以这样写:
git commit -m "feat(player): 播放功能开发完成"
引号内即 commit 的 message:
- feat 表明本次提交的类型
- 括号内容是本次代码的影响目录/文件
- 冒号后面是本次提交的简短描述(冒号后面推荐来个空格)
加点表情符号(当然,你要先安装 gitmoji-cli):
git commit -m "feat(player): :rocket: 播放功能开发完成"