git 规范化提交代码

121 阅读3分钟

一、前言

为什么要对 commit msg 进行规范化?

在团队合作开发时,当你遇到需要上线分支中的一部分功能,想要 cherry-pick 的时候,就会很难受,commit msg清一色都是update xxx,也不知道要把哪些 commit 找出来。同样,其他人在阅读你的提交记录时也会非常头疼,不知道到底修改了什么。这时候就需要对提交信息进行规范化处理了。

如果 git commit 的描述信息精准,在后期维护和 Bug 处理时会变得有据可查,项目开发周期内还可以根据规范的提交信息快速生成开发日志,从而方便我们追踪项目和把控进度。

对于 git 的提交规范,不同的团队可能有不同的标准,目前比较流行的是 Angular 规范。

二、commit msg 提交规范

每次提交,Commit msg 都包括三个部分:Header,Body 和 Footer。

<type>(<scope>): <subject>
// 空一行
<body>
// 空一行
<footer>
  • Header(必需):只有一行,包括三个字段:type(必需)、scope(可选)和subject(必需)。

(1) type

type用于说明 commit 的类别,有如下几种。

-   feat:添加新功能(feature)
-   fix:修补bug
-   docs:文档(documentation)
-   style:格式(不影响代码运行的变动)
-   refactor:重构(即不是新增功能,也不是修改bug的代码变动)
-   test:增加测试
-   chore:构建过程或辅助工具的变动

(2)scope

scope 用于指定本次 commit 影响的范围。scope 依据项目而定,例如在业务项目中可以依据菜单或者功能模块划分,如果是组件库开发,则可以依据组件划分。

(3)subject

subject是 commit 目的的简短描述,不超过50个字符,通常遵循以下几个规范:

-   以动词开头,使用第一人称现在时,比如`change`,而不是`changed``changes`
-   第一个字母小写
-   结尾不加句号(`.`
  • Body(可选):是对本次 commit 的详细描述,可以分成多行。

应该说明代码变动的动机,以及与以前行为的对比。

  • Footer(可选):是对不兼容变动和关联的issue进行描述。

如果本次提交的代码是突破性的变更或关闭缺陷,则 Footer 必需,否则可以省略。

(1) 突破性的变更

当前代码与上一个版本有突破性改变,则 Footer 以 BREAKING CHANGE 开头,后面是对变动的描述、以及变动的理由。

(2) 关闭缺陷

如果当前提交是针对特定的 issue,那么可以在 Footer 部分填写需要关闭的单个 issue 或一系列 issues。

三、Commitizen 实现规范提交

安装 Commitizen

 npm install -g commitizen

然后,运行下面的命令,使其支持 Angular 的 Commit message 格式。

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

以后,凡是用到git commit命令,一律改为使用git cz。就会出现如下选项,用来生成符合格式的 Commit message。 image.png

四、生成 change log

如果你的所有 Commit 都符合 Angular 格式,那么发布新版本时, Change log 就可以用脚本自动生成,输入命令安装:

npm i conventional-changelog-cli --save-dev

配置 package.json

"changelog": "conventional-changelog -p angular -i CHANGELOG.md -s -r 0"

上面 changelog 命令不会覆盖以前的 CHANGELOG,只会在 CHANGELOG.md 的头部加上自从上次发布以来的变动。

npm run changelog

会生成一个 CHANGELOG.md 文件

参考文档:www.ruanyifeng.com/blog/2016/0…