(转)Git提交信息规范化

2019-10-17  本文已影响0人  Abin_
image.png

目的

Git版本规范

分支

Tag

采用三段式,v版本.里程碑.序号,如v1.2.1

changelog

版本正式发布后,需要生产changelog文档,便于后续问题追溯。

Git提交信息

message信息格式采用目前主流的Angular规范,这是目前使用最广的写法,比较合理和系统化,并且有配套的工具。

image.png

commit message格式说明

Commit message一般包括三部分:Header、Body和Footer。

Header

type(scope):subject

Body

对本次commit的详细描述,可分多行

Footer

不兼容变动:需要描述相关信息
关闭指定Issue:输入Issue信息

commit message工具

Commitizen是一个主流的 Commit message 的生成工具,支持Angular的commit message格式,被众多主流框架采用。

$ npm install -g commitizen

安装完成后,需要在项目目录下,输入以下命令来初始化您的项目以使用cz-conventional-changelog适配器

$ commitizen init cz-conventional-changelog --save --save-exact

上述命令会干3件事情:

  • 安装cz-conventional-changelog
  • 保存其依赖到package.json中
  • 添加config.commitizen key到package.json中,如下:
"config": {
"commitizen": {
     "path": "./node_modules/cz-conventional-changelog"
}
}

然后使用git cz代替git commit命令即可,或者可以增加友好的npm命令,通过npm run commit进行提交!

"script": {
    "commit": "git-cz"
}

也可以本地安装:

$ npm install --save-dev commitizen

使用项目内的本地

$ ./node_modules/.bin/commitizen init cz-conventional-changelog --save-dev --save-exact
$ ./node_modules/.bin/git-cz

生成change log文件

cz-conventional-changelog 可以自动根据提交信息生成change log,便于统一管理和查阅!

$ npm install -g conventional-changelog-cli

进入项目执行

# 在之前生成的基础上,叠加
$ conventional-changelog -p angular -i CHANGELOG.md -s
# 生成所有记录,包括之前的
$ conventional-changelog -p angular -i CHANGELOG.md -s -r 0

同样可以创建npm脚本,来更方便的操作

"scripts": {
    "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s -r 0 && git add CHANGELOG.md"
}

强制验证提交信息

采用Git hooks来拦截提交信息,进行格式判断。这里使用commit-msg钩子,该钩子接收一个参数(存有当前提交信息的临时文件的路径)。如果该钩子脚本以非0退出,Git将放弃提交。

yorkie用于执行git-hooks,首先在package.json中增加相关配置

$ npm i --D yorkie
"gitHooks": {
    "commit-msg": "node git-hooks/verify-commit-msg.js"
}

verify-commit-msg.js

const chalk = require('chalk')
const msgPath = process.env.GIT_PARAMS
const msg = require('fs').readFileSync(msgPath, 'utf-8').trim()

const commitRE = /^(revert: )?(feat|fix|polish|docs|style|refactor|perf|test|workflow|ci|chore|types|build)(\(.+\))?: .{1,50}/

if (!commitRE.test(msg)) {
  console.error(
    `  ${chalk.bgRed.white(' ERROR ')} ${chalk.red(`invalid commit message format.`)}\n\n` +
    chalk.red(`  Proper commit message format is required for automated changelog generation. Examples:\n\n`) +
    `    ${chalk.green(`feat(compiler): add 'comments' option`)}\n` +
    `    ${chalk.green(`fix(v-model): handle events on blur (close #28)`)}\n\n` +
    chalk.red(`  You can also use ${chalk.cyan(`npm run commit`)} to interactively generate a commit message.\n`)
  )
  process.exit(1)
}

————————————————
版权声明:本文为CSDN博主「奋飛」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ligang2585116/article/details/80284819

上一篇 下一篇

猜你喜欢

热点阅读