husky结合commitlint审查commit信息

commintlint是一个npm包用来规范化我们的commit信息,当然这个行为的操作时期是在git的commit-msg生命周期期间,这一点当然是有husky来控制,需要注意的是commit-msg作为一个git生命周期会被git commit和git merge行为唤醒,并且可以通过git命令后缀跳过这一生命周期

一、准备工作

1.下载一下commitlint

npm install --save-dev @commitlint/config-conventional @commitlint/cli

 这个命令下载了两个东西,@commitlint/cli实际上是commintlint的别名,就是包的本体,@commitlint/config-convebtional实际上是默认的配置,后面会在配置表中extend字段进行注入

2.配置一下commintlint

这边的话我直接贴一下网上找来的配置,创建commitlint.config.js,并写下如下内容(网上找的,暂时看看)

export default {
    extends: ['@commitlint/config-conventional'],
    rules: {
      "type-enum": [2, 'always', [
        'feat', 'fix', 'docs', 'perf', 'revert', 'ci', 'test', 'refactor', 'build', 'style', 'chore'
      ]],
      'type-case': [0],//type 的输入格式,默认为小写‘lower-case’
      'type-empty': [0],//type 是否可为空
      'scope-empty': [0],//scope 是否为空
      'scope-case': [0],//scope 的格式,默认为小写‘lower-case’
      'subject-full-stop': [0, 'never'],//subject 结尾符,默认为.
      'subject-case': [0, 'never'],//subject 的格式,默认其中之一:['sentence-case', 'start-case', 'pascal-case', 'upper-case']
      'header-max-length': [0, 'always', 72]//header 最大长度,默认为72字符
    },
  };
  

3.创建husky的commit-msg钩子

我是分了两个步骤

npx husky add .husky/commit-msg

然后在这个钩子中写入

npx --no -- commitlint --edit

二、尝试一下写一个错误的提交

git commit -m "testhh"

看一下有什么错误

我们的commintlint果然很严格呢

三、什么才是合格的提交

我们可以看一下@commitlint/config-conventional这个默认配置的npm页面上是怎么写的

说明一下我们上面的commitlint.config.js之中配置应该是自定义部分和@commitlint/config-conventional这个配置的融合版本

下面借一张图说一下每个项的一些配置涉及什么内容

 上图是一个type-enum的配置,我们要配置的内容其实是value中的,condition代表了生效条件,也就是你的msg的类型一定要是在value之中,rule表示应该是检测的时机,这里是永远需要检测,level应该决定的是违反该规则是否报错,这样的话我们就能更好理解配置中每个内容了,这里其他配置默认配置我就不多说了。

那我们看一下我们写的commitlint.config.js里面的一些内容是啥意思

单说下面这个规则

"type-enum": [2, 'always', ['feat', 'fix', 'docs', 'perf', 'revert', 'ci', 'test','refactor', 'build', 'style', 'chore']]

type-enum我们在上面见到过,它的value是一个数组,为啥这里的值是三个呢,前面那个2和always是啥意思?

实际上每个规则都有三个参数

level表示层级,0表示取消该规则,1表示违反该规则会导致warning,2表示违反规则会抛出一个错误

applicable的值则表示是否逆转这个规则,如 type-enum如果第二个参数写上never,则你提交的msg的type必须不在value的范围之内。

第三个value就是正常的value。

那么我们重看上面的我们在网上找的commitlint.config.js,里面的内容实际上就是取消了@commitlint/config-conventional这个默认配置表的一些规则,这样的话,我觉得如何定制自己的配置大概就有数了。

四、一个完整的正确的提交信息例子

build: 进行一次提交测试

    这里是提交信息的body部分

    这个我不知道干什么的footer部分

注意这个“build:"后面有一个空格一定要写,你不写就提示你缺少subject

git有一个提交约定,可以看约定式提交

上面这个网页有详述 ,这样的话就可以理解上面的那些fix等等到底意味着什么,这里我就不写了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/351097.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

03-Redis缓存高可用集群

文章目录 1、Redis集群方案比较2、Redis高可用集群搭建redis集群搭建Java操作redis集群 4、Redis集群原理分析槽位定位算法跳转重定位Redis集群节点间的通信机制gossip通信的10000端口网络抖动 Redis集群选举原理分析集群脑裂数据丢失问题集群是否完整才能对外提供服务Redis集群…

第二百八十八回

文章目录 1. 概念介绍2. 使用方法2.1 实现步骤2.2 具体细节 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何获取文件类型"相关的内容,本章回中将介绍如何播放视频.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 播放视频是我们常用…

用Visual Studio Code创建JavaScript运行环境【2024版】

用Visual Studio Code创建JavaScript运行环境 JavaScript 的历史 JavaScript 最初被称为 LiveScript,由 Netscape(Netscape Communications Corporation,网景通信公司)公司的布兰登艾奇(Brendan Eich)在 …

Java基础—面向对象OOP—17类与对象(创建、构造器、创建对象时简单内存分析)

把握重点,重点已标注,这篇笔记分了4个章节,重点看二、三、四 一、整体思维--重点把握面向对象的本质和特点 1、面向对象编程OOP: Object-Oriented programming 2、面向过程与面向对象 面向过程:线性思维 面向对象…

[嵌入式软件][启蒙篇][仿真平台] STM32F103实现IIC控制OLED屏幕

上一篇:[嵌入式软件][启蒙篇][仿真平台] STM32F103实现LED、按键 [嵌入式软件][启蒙篇][仿真平台] STM32F103实现串口输出输入、ADC采集 [嵌入式软件][启蒙篇][仿真平台]STM32F103实现定时器 [嵌入式软件][启蒙篇][仿真平台] STM32F103实现IIC控制OLED屏幕 文章目…

有关链表的题目

目录 1.环形链表的约瑟夫问题 2.链表的中间节点 3.合并两个有序链表 4.反转链表 5.移除链表元素 1.环形链表的约瑟夫问题 环形链表的约瑟夫问题_牛客题霸_牛客网 (nowcoder.com) 思路:题目给出结构是环形链表,且题目已经定义好了环形链表的结构。 1…

MATLAB - 控制小车上的倒立摆

系列文章目录 前言 一、小车 - 摆杆 小车 - 摆杆模型如图 1 所示,使用 Simscape™ Multibody™ 在 Simulink 中建模。 图 1:小车上的倒立摆 图 2:Simscape 多体模型 该系统通过对小车施加可变力 进行控制。控制器需要在将小车移动到新位置或…

145基于matlab的求解悬臂梁前3阶固有频率和振型

基于matlab的求解悬臂梁前3阶固有频率和振型,采用的方法分别是(假设模态法,解析法,瑞利里兹法)。程序已调通,可直接运行。 145 matlab 悬臂梁 固有频率 振型 (xiaohongshu.com)

正则匹配 | 正则实际应用探索分享

这并不是一篇教正则基础的文章,其正则式不能对您进行使用后的结果负责,请以研究的眼光看待本篇文章。 技术就是懒人为了更好的懒才会想办法搞的东西,我最近因为某些原因需要频繁删除注释 我就想到通过替换的正则功能快速删除文件中的简单注…

微信小程序(十八)组件通信(父传子)

注释很详细,直接上代码 上一篇 新增内容: 1.组件属性变量的定义 2.组件属性变量的默认状态 3.组件属性变量的传递方法 解释一下为什么是父传子,因为组件是页面的一部分,数据是从页面传递到组件的,所以是父传子&#xf…

DevExpress WinForms导航控件 - 交付更时尚、体验更好的业务应用(二)

DevExpress WinForms的Side Navigation(侧边导航)和Nav Panel(导航面板)可以帮助客户交付完全可模仿UI体验的业务解决方案,这些体验在当今流行的应用程序中都可找到。在上文中(点击这里回顾>>&#x…

数据结构排序算详解(动态图+代码描述)

目录 1、直接插入排序(升序) 2、希尔排序(升序) 3、选择排序(升序) 方式一(一个指针) 方式二(两个指针) 4、堆排序(升序) 5、冒…

IP报文格式

IP报文格式 报文格式 图1 IP头格式 表1 IP头字段解释 字段长度含义Version4比特 4:表示为IPV4;6:表示为IPV6。IHL4比特首部长度,如果不带Option字段,则为20,最长为60,该值限制了记录路由选项。…

Flink问题解决及性能调优-【Flink根据不同场景状态后端使用调优】

Flink 实时groupby聚合场景操作时,由于使用的是rocksdb状态后端,发现CPU的高负载卡在rocksdb的读写上,导致上游算子背压特别大。通过调优使用hashmap状态后端代替rocksdb状态后端,使吞吐量有了质的飞跃(20倍的性能提升…

【Tomcat与网络1】史前时代—没有Spring该如何写Web服务

在前面我们介绍了网络与Java相关的问题, 最近在调研的时候发现这块内容其实非常复杂,设计的内容多而且零碎,想短时间梳理出整个体系是不太可能的,所以我们还是继续看Tomcat的问题,后面有网络的内容继续补充吧。 目录 …

简单记录一下如何安装python以及pycharm(图文教程)(可供福建专升本理工类同学使用)

本教程主要给不懂计算机的或者刚刚开始学习python的同学(福建专升本理工类)&网友学习使用,基础操作,比较详细,其他问题等待补充! 安装Python 1.进入python官网(https://www.python.org/&a…

泽众云真机-远程真机测试常见问题汇总及解决办法

泽众云真机通过网页操作接入云端的真实手机,覆盖市场海量机型,远程操控快速流畅,用户随时随地进行测试,调试应用,快速定位问题,被测应用轻松获得FPS、CPU、Memory、CTemp、Network、FrameTime等性能参数&am…

响应式Web开发项目教程(HTML5+CSS3+Bootstrap)第2版 例5-1事件处理

代码 <!doctype html> <html> <head> <meta charset"utf-8"> <title>事件处理</title> </head><body> <input id"btn" type"button" name"btn" value"提交" /> <…

计算机网络-奈氏准则和香农定理(码间串扰 二者区别)

文章目录 失真失真的一种现象-码间串扰奈氏准则&#xff08;奈溃斯特定理&#xff09;例题 香农定理例题 奈氏和香农 失真 就是指与原来的不一样了 两种情况 前三个是正相关&#xff0c;最后一个是负相关 码元传输速率越快&#xff0c;失真程度越严重的原因可能包括以下几点…

Vue3中的ref和shallowRef、reactive和shallowReactive

一&#xff1a;ref、reactive简介 ref和reactive是Vue3中定义响应式数据的一种方式。ref通常用来定义基础类型数据。reactive通常用来定义复杂类型数据。 二、shallowRef、shallowReactive简介 shallowRef和shallowReactive是Vue3中定义浅层次响应式数据的方式 三、Api使用对比…