Commit规范指南 - 图1

参考文章

背景

Git 每次提交代码,都要写 Commit message(提交说明),提交内容也五花八门,不便于后续的项目阅读和管理。

优点

  • 可读性好,清晰,不必深入看代码即可了解当前commit的作用。
  • 为 Code Reviewing做准备
  • 方便跟踪工程历史
  • 让其他的开发者在运行 git blame 的时候想跪谢
  • 方便生成修改日志(CHANGELOG.MD)

git blame => 查看文件的每一行是谁修改的

如下:查看 index.html中10行2列修改人

  1. git blame -L 10,+2 index.html

规范

可以使用典型的Git工作流程或通过使用CLI向导Commitizen来添加提交消息格式。

使用界面:
image.png

安装

  1. # 全局安装
  2. npm install -g commitizen
  3. # 或者本地安装
  4. npm install --save-dev commitizen
  5. # 安装适配器
  6. npm install cz-conventional-changelog

配置

在package文件中,添加以下代码:

  1. "config": {
  2. "commitizen": {
  3. "path": "cz-conventional-changelog"
  4. }
  5. }

使用

凡是用到git commit命令,一律改为使用git cz。这时,就会出现选项,用来生成符合格式的 Commit message。

编辑器插件

如果你使用的是webstorm,在plugin中搜索commit安装即可

image.png

到此就可以使用 git cz 来替换git commit了,
最后给你项目的README加上一个标识吧。

  1. [![Commitizen friendly](https://img.shields.io/badge/commitizen-friendly-brightgreen.svg)](http://commitizen.github.io/cz-cli/)

格式

每次提交,Commit message 都包括三个部分:header,body 和 footer。

  1. <type>(<scope>): <subject>
  2. <BLANK LINE>
  3. <body>
  4. <BLANK LINE>
  5. <footer>

Header

Header部分只有一行,包括三个字段:type(必需)、scope(可选)和subject(必需)。

  • 1.type

用于说明 commit 的类别,只允许使用下面7个标识。

commit类别 - 说明

  1. feat | 新功能(feature
  2. fix | 修补bug
  3. docs | 文档(documentation
  4. style | 格式(不影响代码运行的变动)
  5. refactor:| 重构(即不是新增功能,也不是修改bug的代码变动)
  6. test | 增加测试
  7. chore | 构建过程或辅助工具的变动
  8. revert | commit 回退
  • 2.scope

scope用于说明 commit 影响的范围,比如数据层、控制层、视图层等等,视项目不同而不同。

  • 3.subject

subjectcommit 目的的简短描述,不超过50个字符。

Body

Body 部分是对本次 commit 的详细描述,可以分成多行。下面是一个范例。

Footer

Footer 部分只用于以下两种情况:

不兼容变动

关闭 Issue

格式校验commitlint

安装依赖

  1. npm install --save-dev @commitlint/{config-conventional,cli}
  2. # 安装husky
  3. npm install --save-dev husky

添加配置

添加 commitlint.config.js文件到项目

  1. echo "module.exports = {extends: ['@commitlint/config-conventional']}" > commitlint.config.js

package.json配置

  1. "husky": {
  2. "hooks": {
  3. "commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
  4. }
  5. },

添加标识

Commit规范指南 - 图4

  1. [![Commitizen friendly](https://img.shields.io/badge/commitizen-friendly-brightgreen.svg)](http://commitizen.github.io/cz-cli/)

无权问题

image.png

  1. chmod ug+x .husky/*
  2. chmod ug+x .git/hooks/*

自动版本管理和生成CHANGELOG

版本管理和CHANGELOG

完整的package.json

commitizen + cz-conventional-changelog + standard-version

  1. {
  2. "name": "blog",
  3. "version": "1.0.0",
  4. "description": "blog",
  5. "main": "index.js",
  6. "scripts": {
  7. "start": "npm run dev",
  8. "release": "standard-version",
  9. "release:alpha": "standard-version --prerelease alpha",
  10. "release:rc": "standard-version --prerelease rc",
  11. "release:major": "npm run release -- --release-as major",
  12. "release:minor": "npm run release -- --release-as minor",
  13. "release:patch": "npm run release -- --release-as patch"
  14. },
  15. "devDependencies": {
  16. "commitizen": "^4.2.2",
  17. "cz-conventional-changelog": "^3.3.0",
  18. "standard-version": "^9.1.0"
  19. },
  20. "config": {
  21. "commitizen": {
  22. "path": "cz-conventional-changelog"
  23. }
  24. }
  25. }