git的规范和相关科普知识
git commit 的规范要求(参考Angular团队)
- message格式如下:
<type>(<scope>): <subject>
// 空一行
<body>
// 空一行
<footer>
分别对应Commit message 的三个部分: Header, Body, Footer
下面详细解释这三个部分里面的字段:
Header
type(必须), scope(可选), subject(必须)
- type:用于说明commit的类型。一般有以下几种
feat : 新增feature(功能) fix : 修复bug docs : 仅仅修改了文档,如readme.md style : 仅仅对样式进行修改,如逗号,缩进,空格。不改变代码逻辑 refactor: 代码重构,没有新增功能或修复bug perf : 优化相关,如提升性能,用户体验等。 test : 测试用例,包括单元测试,集成测试。 chore : 改变构建流程,或者增加依赖库,工具等。 revert : 版本回滚
- scope : 用于说明commit影响的范围,比如:views,component,utils,test....
- subject : commit目的的简短描述
Body
对本次commit 修改内容的具体描述,可以分为多行。如下:# body:72-character wrapped. This should answer: # * Why was this change necessary? # * How does it address the problem? # * Are there any side effects? # * initial commit
Footer
一些备注,通常是BREAKING CHANGE(当前代码与上一个版本不兼容)或修复的bug(关闭Issue)的连接
为了使用方便可以通过命令行去配置提交信息的模板
git config commit.template [模板文件名] // 这个命令只是设置当前分支的提交模板 git config --global commit.template [模板文件名] // 这个命令能设置全局的提交模板
新建的.gitmessage.txt (模板文件) 内容可以如下:
# header:<type>(<scope>):<subject> # - type: feat, fix, docs, style, refactor, test, chore # - subject: start with verb (such as 'change'), 50-character line # # body:72-character wrapped. This should answer: # * Why was this change necessary? # * How does it address the problem? # * Are there any side effects? # # footer: # - Include a link to the issue # - BREAKING CHANGE
如果觉得配置麻烦,也可以使用工具 commitizen(cz-cli)
接下来介绍这个工具的使用流程:
- 首先还是要先再命令行执行
git add ./
- 然后会要你通过上下文控件指向你想要的type类型,含义分别对应上面的
feat fix docs
等:
然后会让你选择本次提交影响到的文件(一般是直接输入路径就好了)
后面会分别让你写一个简短和详细的描述
最后会让你去判断本次提交是否是BREAKING CHANGE 或者有关联已开启的Issue
安装
commitizen 根据不同的adapter配置 commit message。例如,要使用Angular 的 commit message 格式,可以安装cz-conventional-changelog
全局安装:
// 需要同时安装commitizen和cz-conventional-changelog,后者是adapter $ npm install -g commitizen cz-conventional-changelog // 配置安装的adapter $ echo '{ "path": "cz-conventional-changelog" }' > ~/.czrc // 使用 $ git cz
本地项目安装:
// 安装commitizen npm install --save-dev commitizen // 接下来安装适配器 npm版本不同分别由不同安装指令 // for npm >= 5.2 npx commitizen init cz-conventional-changelog --save-dev --save-exact // for npm < 5.2 ./node_modules/.bin/commitizen init cz-conventional-changelog --save-dev --save-exact // package.json script字段中添加commit命令 "scripts": { "commit": "git-cz" } // use npm run commit
如果你想添加一个提交的校验工具可以使用另一个工具commitlint
原理:
就是利用git的钩子来验证信息,提交不符合规则的信息将会被阻止提交到远程仓库中
对于conventional Commit 规范,社区已经整理好了,我们要做的只是安装就可以了
- 首先安装 commitlint 以及 conventional 规范:
npm install --save-dev @commitlint/cli @commitlint/config-conventional
之后在package.json 中配置commitlint 脚本:
"commitlint": { "extends": [ "@commitlint/config-conventional" ] },
如果你想单独对 commitlint 进行配置的话,需要建立校验文件 commitlint.config.js,不然会校验失败
为了可以在每次 commit 时执行 commitlint 来 检查我们输入的 message,我们还需要用到一个工具 —— husky。
husky 是一个增强的 git hook 工具。可以在 git hook 的各个阶段执行我们在 package.json 中配置好的 npm script。
首先安装 husky:
npm install --save-dev husky
接着在 package.json 中配置 commitmsg 脚本:
"husky": { "hooks": { "commit-msg": "commitlint -E HUSKY_GIT_PARAMS" } },
还有一个很好玩的是,如果你想git的时候添加表情,你可以使用工具
gitmoji-cli
安装npm i -g gitmoji-cli // 使用 git commit -m ':bug: 问题fix'