git commit规范
Angular.js 项目所使用的git commit规范
每次提交,Commit message 都包括三个部分:Header,Body 和 Footer。其中,Header 是必需的,Body 和 Footer 可以省略
Header
Header部分只有一行,包括三个字段:type(必需)、scope(可选)和subject(必需)
type
- build:编译相关的修改,例如发布版本、对项目构建或者依赖的改动
- chore:其他修改, 比如改变构建流程、或者增加依赖库、工具等
- ci:持续集成修改
- docs:文档修改
- feat:新特性、新功能 feature
- fix:修补bug
- perf:优化相关,比如提升性能、体验
- refactor:代码重构
- revert:当前commit用于撤销以前的commit
- style:代码格式修改,注意不是 css 修改
- test:测试用例修改
[scope]
scope用于说明 commit 影响的范围,比如数据层、控制层、视图层等等,视项目不同而不同。
例如在Angular
,可以是$location
, $browser
, $compile
, $rootScope
, ngHref
, ngClick
, ngView
等。
如果你的修改影响了不止一个scope
,你可以使用*
代替。
subject
subject
是 commit 目的的简短描述,不超过50个字符。
其他注意事项:
- 以动词开头,使用第一人称现在时,比如change,而不是changed或changes
- 第一个字母小写
- 结尾不加句号(.)
Body
Body 部分是对本次 commit 的详细描述,可以分成多行。下面是一个范例。
More detailed explanatory text, if necessary. Wrap it to about 72 characters or so. Further paragraphs come after blank lines. - Bullet points are okay, too - Use a hanging indent
注意点:
- 使用第一人称现在时,比如使用change而不是changed或changes。
- 永远别忘了第2行是空行
- 应该说明代码变动的动机,以及与以前行为的对比。
Footer
Footer 部分只用于以下两种情况:
不兼容变动
如果当前代码与上一个版本不兼容,则 Footer 部分以BREAKING CHANGE开头,后面是对变动的描述、以及变动理由和迁移方法。
BREAKING CHANGE: isolate scope bindings definition has changed. To migrate the code follow the example below: Before: scope: { myAttr: ‘attribute’, } After: scope: { myAttr: ‘@’, } The removed
inject
wasn’t generaly useful for directives so there should be no code using it.
关闭 Issue
如果当前 commit 针对某个issue,那么可以在 Footer 部分关闭这个 issue 。
1 | Closes #234 |
revert
如果当前 commit 用于撤销以前的 commit,则必须以revert:开头,后面跟着被撤销 Commit 的 Header。
revert: feat(pencil): add ‘graphiteWidth’ option
This reverts commit 667ecc1654a317a13331b17617d973392f415f02.
Body部分的格式是固定的,必须写成This reverts commit <hash>
.,其中的hash是被撤销 commit 的 SHA 标识符。
如果当前 commit 与被撤销的 commit,在同一个发布(release)里面,那么它们都不会出现在 Change log 里面。如果两者在不同的发布,那么当前 commit,会出现在 Change log 的Reverts小标题下面。
举个例子
例如一个新功能,添加登陆模块 git commit 中的信息可以这样写:
1 | feat[login] add login module |
其中feat为提交类型type,login为域scope,“add login module
”为 commit 目的的简短描述
git cz工具
1 | # 全局安装 |
commitlint + husky
安装配置prettier
1
2
3
4
5# 安装
yarn add --dev --exact prettier
# 配置
.prettierrc.js
.prettierignore安装配置 Pre-commit Hook,用于提交代码之前自动格式化,这里会自动安装 husky
1
npx mrm@2 lint-staged
安装 eslint-config-prettier,解决prettier和eslint的冲突
1
2
3
4
5
6
7
8
9
10
11
12yarn add eslint-config-prettier -D
# vim package.json
...
"eslintConfig": {
"extends": [
"react-app",
"react-app/jest",
"prettier"
]
},
...安装并配置 commitlint
1
2
3
4
5
6
7
8
9
10
11
12
13# 1.
yarn add @commitlint/{config-conventional,cli} -D
# 2.
echo "module.exports = {extends: ['@commitlint/config-conventional']}" > commitlint.config.js
# 3.
cat <<EEE > .husky/commit-msg
#!/bin/sh
. "\$(dirname "\$0")/_/husky.sh"
npx --no -- commitlint --edit "\${1}"
EEE
# 4.
chmod a+x .husky/commit-msg