今天被大佬说让我学习下git commit 的格式规范,学习工作的规范是宜早不宜迟啊!不然还是要重新返工,因为跑代码不在本机上,刚开始用git的时候经常来回push。git commit的信息每一次提交就要写,写的多了后来就有点随意了。现在回头看简直惨不忍睹,有用的信息太少无法判断修改的内容在哪里。
今天特此来记录学习,如有错误还望多提意见!
- 盗用知乎上的一句话:“这种东西,当然要借助工具了,才能够写得即规范,又格式化,还能够支持后续分析,使用终端工具commitizen/cz-cli+ commitizen/cz-conventional-changelog+conventional-changelog/standard-version一步解决信息提交和版本发布” @李华桥
git commit message 格式
- 提交格式
<type>(<scope>): <subject>
// 空一行
<body>
- 范例
docs(weekly-report): add final-report folder
Add project summary folder final-report. The development process and major problems and improvementsof the image classification and detection model will be reflected in the final-report.md file.
- 说明
type (必需) scope(可选)和subject(必需)
body(可选)
(1)type用于说明commit的累呗,只允许使用下面8个标识。
1 build: 主要目的是修改项目构建系统(例如glup,webpack,rollup的配置等)的提交
2 ci:主要目的是修改项目继续完成集成流程(例如Travis,Jenkins,GitLab CI,Circle)的提交
3 doc:对应的文档更新
3 feat:项目中的新增功能(feature)
4 fix: bug修复
5 pref:性能优化
6 refactor:重构代码(既没有新功能,也没有修复bug)
7 style:不影响程序逻辑的代码修改(更加规范,加入空白符,补全分号)
8 test:新增测试用例或是更新现有测试
9 revert:回滚某个更早之前的提交
10 chore: 不属于以上类型的其他类型
(2)scope
scope 用于说明commit影响的范围,比如数据层,控制层,视图层等等,视项目的不同而不同
(3)subject
subject是commit内容的尖端描述,不超过50个字符。
义动词开头,使用第一人称现在时,比如change,而不是changed或changes,第一个字母小写。结尾不加英文句号(.)
(4)Body部分是本次commit的详细描述,可以分成多行。
commitizen:替代你的git commit
通过借助工具commitizen/cz-cli的安装之后,就会产生规范性的提示语句,帮助我们形成规范的commit message
首先我们需要安装npm,安装环境需要在linux下,我这里是ubuntu18.04。如果是windows需要使用docker容器,将本地的文件映射到容器中。同学们最好是用linux比较方便。windows家庭版安装docker可以参考这篇文章
apt-get install npm
- 全局安装
npm install -g commitizen cz-conventional-changelog
echo '{ "path": "cz-conventional-changelog" }' > ~/.czrc
安装成功的界面:docker下的ubuntu
主要, 全局模式下, 需要 ~/.czrc 配置文件, 为 commitizen 指定 Adapter.
安装成功后,在对应的github项目中执行git cz or npm run commit 都可以,效果如下:
commitlint: 可以帮助我们 lint commit messages, 如果我们提交的不符合指向的规范, 直接拒绝提交, 比较狠.
同样的, 它也需要一份校验的配置, 这里推荐 @commitlint/config-conventional (符合 Angular团队规范).
安装:
npm i -D @commitlint/config-conventional @commitlint/cli
安装过程中如果出现了类似下面的错误:
npm WARN enoent ENOENT: no such file or directory, open '/tmp/git-project/backup/package.json'
npm WARN backup No description
npm WARN backup No repository field.
npm WARN backup No README data
npm WARN backup No license field.
解决方法:
首先初始化项目,一路回车就行
npm init -f
接着安装依赖
npm install formidable --save
然后再输入上面的安装命令
最后再项目目录下创建配置文件.commitlintrc.js;写入
module.exports = {
extends: [
''@commitlint/config-conventional''
],
rules: {
}
};
结合Husky
检验commit message 的最佳方式是结合git hook
安装:
npm i husky@next
出现了下面的错误
npm ERR! Linux 4.9.125-linuxkit
npm ERR! argv "/usr/bin/node" "/usr/bin/npm" "i" "husky@next"
npm ERR! node v8.10.0
npm ERR! npm v3.5.2
npm ERR! No compatible version found: husky@next
npm ERR! Valid install targets:
npm ERR! 2.4.1, 2.4.0, 2.3.0, 2.2.0, 2.1.0, 2.0.0, 1.3.1, 1.3.0, 1.2.1, 1.2.0, 1.1.4, 1.1.3, 1.1.2, 1.1.1, 1.1.0, 1.0.1, 1.0.0, 1.0.0-rc.15, 1.0.0-rc.14, 1.0.0-rc.13, 1.0.0-rc.12, 1.0.0-rc.11, 1.0.0-rc.10, 1.0.0-rc.9, 1.0.0-rc.8, 1.0.0-rc.7, 1.0.0-rc.6, 1.0.0-rc.5, 1.0.0-rc.4, 1.0.0-rc.3, 1.0.0-rc.2, 1.0.0-rc.1, 0.15.0-rc.13, 0.15.0-rc.12, 0.15.0-rc.11, 0.15.0-rc.10, 0.15.0-rc.9, 0.15.0-rc.8, 0.15.0-rc.7, 0.15.0-rc.6, 0.15.0-rc.5, 0.15.0-rc.4, 0.15.0-rc.3, 0.15.0-rc.2, 0.15.0-rc.1, 0.15.0-beta.16, 0.15.0-beta.15, 0.15.0-beta.14, 0.15.0-beta.13, 0.15.0-beta.12, 0.15.0-beta.11, 0.15.0-beta.10, 0.15.0-beta.9, 0.15.0-beta.8, 0.15.0-beta.7, 0.15.0-beta.6, 0.15.0-beta.5, 0.15.0-beta.4, 0.15.0-beta.3, 0.15.0-beta.2, 0.15.0-beta.1, 0.15.0-beta.0, 0.14.3, 0.14.2, 0.14.1, 0.14.1-2, 0.14.1-1, 0.14.1-0, 0.14.0, 0.14.0-1, 0.14.0-0, 0.13.4, 0.13.3, 0.13.3-0, 0.13.2, 0.13.1, 0.13.0, 0.13.0-1, 0.13.0-0, 0.12.0, 0.12.0-2, 0.12.0-1, 0.12.0-0, 0.11.9, 0.11.8, 0.11.7, 0.11.6, 0.11.5, 0.11.4, 0.11.3, 0.11.2, 0.11.1, 0.11.0, 0.10.2, 0.10.1, 0.10.0, 0.9.3, 0.9.2, 0.9.1, 0.9.0, 0.8.1, 0.8.0, 0.7.0, 0.6.2, 0.6.1, 0.6.0, 0.5.4, 0.5.3, 0.5.2, 0.5.1, 0.5.0, 0.4.3, 0.4.2, 0.4.1, 0.4.0
npm ERR!
npm ERR!
npm ERR! If you need help, you may report this error at:
npm ERR! <https://github.com/npm/npm/issues>
npm ERR! Please include the following file with any support request:
npm ERR! /tmp/git-project/backup/npm-debug.log
尝试官方给出的解决方案,但是没有解决,大家有方法请留言,感激不尽
npm install -g npm
standard-version: 自动生成CHANGELOG
通过以上工具的帮助, 我们的工程 commit message 应该是符合 Angular团队那套, 这样也便于我们借助 standard-version 这样的工具, 自动生成 CHANGELOG, 甚至是 语义化的版本号(Semantic Version).
安装使用:
npm i -S standard-version
package.json配置:
"scirpt": {
...,
"release": "standard-version"
}
参考来源:https://juejin.im/post/5afc5242f265da0b7f44bee4
给自己警醒:好习惯好命运