参考文档:https://mp.weixin.qq.com/s/mAUqTPCqcYjoNDqAxktyfA

使用工具简介:commitizen、cz-conventional-changelog、commitlint、husky

commitizen:Commitizen是一款提升GIT提交过程效率的小工具。它会提示你提供任何必要字段,还会恰当地格式化提交信息。Commitizen内置了对多种提交规范的支持,同时还允许你定制自己的提交规则。这个简单的工具能够节约时间,而不必等待提交钩子运行检查再驳回提交。

cz-conventional-changelog:是commitizen的适配器,使commitizen支持 Angular 的 Commit message 格式

commitlint:设置message的规范

husky:husky 其实就是一个为 git 客户端增加 hook 的工具。将其安装到所在仓库的过程中它会自动在 .git/ 目录下增加相应的钩子实现在 pre-commit 阶段就执行一系列流程保证每一个 commit 的正确性。

一、背景:

团队对提交的commit message格式有约定俗称的要求,但是没有一个统一的规范,导致大家提交的commit message或多或少不太一样。因此,需要一个工具来帮助大家统一commit message的格式,也方便后续的分析和拓展。
现在市面上比较流行的方案是约定式提交规范,它的message 格式如下:

<type>(<scope>): <subject>
// 空一行
<body>
// 空一行
<footer>

二、Commit message 的格式介绍(Angular 团队的 commit 规范)

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

其中,Header 是必需的,Body 和 Footer 可以省略。

不管是哪一个部分,任何一行都不得超过72个字符(或100个字符-自定义)。这是为了避免自动换行影响美观。

(1)header

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

  • type用于说明commit的类型,主要包括一下几种

    feat:新功能(feature)

    fix:修补bug

    docs:文档(documentation)

    style: 格式(不影响代码运行的变动)

    refactor:重构(即不是新增功能,也不是修改bug的代码变动)

    test:增加测试

    chore:构建过程或辅助工具的变动

  • scope用于说明commit的影响范围,可以随便填写任何东西,commitizen也给出了几个 如:location 、browser、compile;或者可以约定为:

    all :表示影响面大 ,如修改了网络框架  会对真个程序产生影响

    loation: 表示影响小,某个小小的功能

    module:表示会影响某个模块 如登录模块、首页模块 、用户管理模块等等

  • subject是commit的简短描述

(2)Body

Body 部分是对本次 commit 的详细描述,可以分成多行。

注意:

  • 使用第一人称现在时,比如使用change而不是changedchanges
  • 应该说明代码变动的动机,以及与以前行为的对比。

(3)Footer

可以描写备注;如果是 bug ,可以把bug id放入

  1. 不兼容变动
    如果当前代码与上一个版本不兼容,则 Footer 部分以BREAKING CHANGE开头,后面是对变动的描述、以及变动理由和迁移方法。
  2. Revert
    如果当前 commit 用于撤销以前的 commit,则必须以revert:开头,后面跟着被撤销 Commit 的 Header。

三、Quick Start

1. 全局安装commitizen & cz-conventional-changelog

注:Commitizen是一个撰写合格 Commit message 的工具,用于代替git commit 指令;cz-conventional-changelog 是AngularJS的规范 (还有其他规范,如cz-customizable(支持一定程度上的自定义,都是commitizen的adapter,有兴趣可以了解一下)

1、全局安装commitizen和cz-conventional-changelog

npm install -g commitizen cz-conventional-changelog

2、创建.czrc文件,在文件中设置:'{ "path": "cz-conventional-changelog" }' ,该步骤的作用是为commitizen指定Adapter

echo '{ "path": "cz-conventional-changelog" }' > ~/.czrc

查看.czrc是否创建成功,可以使用命令:cat ~/.czrc查看文件内容,展示{ "path": "cz-conventional-changelog" }即表示创建成功。

2、项目内安装commitlint & husky

commitlint负责用于对commit message进行格式校验,husky负责提供更易用的git hook。

   1、安装

npm i husky @commitlint/config-conventional @commitlint/cli

2、设置配置文件--创建commitlint.config.js到项目根目录,定义规范

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

也可以使用angular规则:

在文件中直接配置:module.exports = {extends: ['@commitlint/config-angular']};

3、配置钩子

vue-cli3项目:设置package.json:

"gitHooks": { "commit-msg": "commitlint -e $HUSKY_GIT_PARAMS" },

非vue-cli3项目:设置package.json:

{
"hooks": {
      "pre-commit": "lint-staged",
      "commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
   }
}

3、使用

使用git cz代替git commit,执行过程如下图所示:

填写完毕后,husky会调用commitlint对message进行格式校验,默认规定type及subject为必填项。

push之后,项目中展示格式为:

4、自定义规则

参考文档:https://www.npmjs.com/package/@commitlint/config-angular

message的规范可以根据实际需要自定义,设置参看文献:https://commitlint.js.org/#/reference-rules

对commitlint.config.js设置规则为:

执行git cz,当message不符合规范时,commit日志会提示报错!例如当提交代码时,type选择错误并且subject结尾不添加’;‘时,会报如下错误:

四、总结

好处:

1、团队形成一致的代码提交风格,更好的提高工作效率

2、规范的 commit message 有助于团队其它人员 review, 还可以有效的输出 CHANGELOG(借助其他插件可实现), 对项目十分重要

缺点:

1、提交过程比较麻烦

结论:

在多人共同开发的大型项目中比较适用

五、其他(添加change log)

1、使用commit message规范可以:

(1)提供更多的历史信息,方便快速浏览--git log <last tag> HEAD --pretty=format:%s

(2)可以过滤某些 commit(比如文档改动),便于快速查找信息--git log <last release> HEAD --grep feature

(3)可以直接从 commit 生成 Change log。

其中生成log文件需要借助插件:conventional-changelog-cli

conventional-changelog-cli 默认推荐的 commit 标准是来自angular项目,除了 angular 标准以外,目前集成了包括 atom, codemirror, ember, eslint, express, jquery 等项目的标准,具体可以根据具体要求来选用。

安装

npm install -g conventional-changelog-cli

使用(标准为angular,可修改)

conventional-changelog -p angular -i CHANGELOG.md -s

这条命令产生的 changelog 是基于上次 tag 版本之后的变更(Feature、Fix、Breaking Changes等等)所产生的,所以如果你想生成之前所有 commit 信息产生的 changelog 则需要使用这条命令:

conventional-changelog -p angular -i CHANGELOG.md -s -r 0  (r- 默认1,全部0)

效果如下图:

												

Git commit message规范相关推荐

  1. Git学习总结(23)——Git commit message和版本管理规范总结

    一.Git commit message基本规范 对格式的说明如下: type代表某次提交的类型,比如是修复一个bug还是增加一个新的feature.所有的type类型如下: feat: 新增feat ...

  2. Commit Message 规范

    目前 Commit Message 规范比较常见的有 Angular 团队的规范,并由此衍生出了 Conventional Commits Specification,可以参照此 Specificat ...

  3. Git Commit Message校验踩坑指南

    背景 在团队多人开发中,规范的commit message可以快速定位代码提交历史,回溯问题根源,方便组内多人协作,提高团队效率. 本篇文章主要包含以下两方面内容: commitizen/cz-cli ...

  4. Git commit hook 规范标准配置

    Git每次提交代码都需要写commit message,否则就不允许提交.一般来说,commit message应该清晰明了,说明本次提交的目的,具体做了什么操作--但是在日常开发中,大家的commi ...

  5. Git Commit 提交规范

    本项目以目前使用较多的 Angular 团队规范 Conventional Commits specification(约定式提交) 为例. git hook 官方文档 git 提交时,主要分为三部分 ...

  6. git-cz 一款git commit 统一规范的工具

    git-cz 一款git commit 统一规范的工具 介绍:git commit 就是你在修改代码后写一个备注,如果安装了commitizen后,你可以使用git cz取代git commit,每次 ...

  7. Git commit message和工作流规范

    总体方案 Git commit日志基本规范 <type>(<scope>): <subject><BLANK LINE><body>< ...

  8. git commit message——git提交日志规范备忘

    使用git提交时,最好能注意保持规范,可能某些公司对这方面没有要求,但是提交日志不规范的话,不方便查阅和管理. 在此记录下commit的类别,备忘,更详细的介绍,可以查看文末链接. commit me ...

  9. commitizen和cz-customizable配置git commit message 1

    起因 团队对提交的commit message格式有约定俗称的要求,但是没有一个统一的规范,导致大家提交的commit message或多或少不太一样.因此,需要一个工具来帮助大家统一commit m ...

  10. 一文教你如何设置git commit模板规范

    一.git log之痛 今天看公司代码的提交历史,发现信息量过少,甚至是误导的commit message非常常见,并且无法定位到禅道的相关任务(有的公司用的是jira),对新人来说,查找以往的提交记 ...

最新文章

  1. matlab怎么分析一段音频,Matlab分析音频
  2. 全球及中国教育行业投资动态与发展决策建议报告2022版
  3. 打印机如何信任计算机,小技巧,骗取打印机的信任
  4. word2vec词向量 文本分类实现(TensorFlow版,算法TextCNN)
  5. dpkg:处理 xxx (--configure)时出错解决办法
  6. 《信息通信技术与政策》丨盖国强:中国数据库服务生态与体系
  7. 微软重新设计 Edge for Android 的用户界面
  8. Mac 下Axure RP9下载与安装
  9. 论文笔记:A novel DRM scheme for accommodating expectations of personal use
  10. 灵魂 我·将·归·来·开·放
  11. ESP8266开发板刷WI-PWN固件(wifi杀手)教程(详细)
  12. WPS怎么外链网页上的实时数据_数据收集、整理低效繁琐?WPS表单帮你轻松解决...
  13. ucos-III前言
  14. 基于MITRE ATTCK的Red Teaming行动实践
  15. Matlab 求方程的根
  16. 七岁的OpenStack成熟了?企业就绪了?
  17. lingo输出解的解释
  18. Dreamweaver cs5 快捷键大全
  19. 对(纳米)光子学的一点认识
  20. AI化学 | 逆合成分析软件Synbook

热门文章

  1. e路航LH900N导航仪凯立德最新版本地图更新方法
  2. Rush Hour Puzzle
  3. 我的世界服务器信息显示等级,我的世界空岛服务器怎么查方块等级 | 手游网游页游攻略大全...
  4. 房产过户给子女,那种方式比较合适
  5. ISO27017云服务信息安全管理体系认证
  6. Chinese-Whisper聚类算法
  7. 【思想感悟】站在巨人的肩膀上
  8. Actors编程模型
  9. taylor+swift纽约公寓_Taylor Swift $1,800 万美元的纽约豪宅到底豪在哪里?
  10. 2022-04-21 Android开发扫描二维码