配置 Git Husky 代码提交约束
介绍
Git Husky 是一个可以管理 Git Hooks 的工具,它可以帮助我们在代码提交的时候运行脚本,以确保代码提交符合特定的规范和约定。
在 Git 中,允许在操作特定的事件时执行特定的脚本,这些事件我们称之为 Hooks。
Git Husky 利用这些 Hooks 实现了在代码提交前、提交信息规范校验等自动化运行脚本的功能。
安装与配置
1、安装
yarn add husky -D
首先我们需要在项目内安装 husky,并且初始化。
2、添加配置
npx husky install
执行 npx husky install 将会生成 ./husky 的文件夹,在这里我们可以配置 Git Hooks 的脚本文件。
3、初始化
npm pkg set scripts.prepare="husky install"
执行 npm pkg set scripts.prepare="husky install" 将会设置 prepare 的脚本,并将该脚本的执行命令设置为 husky install,它将会在项目启动时初始化 Git Husky。
4、添加 pre-commit hook
npx husky add .husky/pre-commit
执行 npx husky add .husky/pre-commit 将会生成脚本 ./husky/pre-commit ,它会在 git commit 之前执行脚本,如果脚本报错的情况下将无法提交。
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"undefined
5、配置执行脚本
在我们常用的场景中,我们需要在 git commit 之前对脚本进行代码规范的检测。
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"npm run lint
我们将命令修改以上配置,它将会在 git commit 之前执行 npm run lint 命令来执行 eslint 代码检测,如果检测不通过将会拒绝提交。
当然你也可以通过 npx husky add .husky/pre-commit "npm run lint" 命令直接生成脚本。
7、添加 commit-msg hook
npx husky add .husky/commit-msg 'npx --no-install commitlint --edit "$1"'
commit-msg hooks 用于提交信息被保存之后运行。
8、commitlint 校验
yarn add @commitlint/cli -D
我们通常使用 commitlint 工具对提交信息格式进行校验,所以我们需要安装 @commitlint/cli 。
9、常用配置
yarn add @commitlint/config-conventional -D
@commitlint/config-conventional 是一个符合提交信息规范的配置,我们可以直接使用。
在 @commitlint/config-conventional 的规范中,为我们提供了一下规则。
| 分类 | 描述 |
|---|---|
| feat | 新特性 |
| fix | 修复 bug |
| perf | 性能优化 |
| refactor | 代码重构 |
| build | 外部依赖项的更改 |
| chore | 测试文件的更改 |
| ci | 修改构建配置或脚本 |
| docs | 仅文档修改 |
| revert | 撤销之前的提交 |
| test | 添加或修正测试用例 |
新建文件 commitlint.config.cjs 导入 @commitlint/config-conventional 规则。
module.exports = {extends: ['@commitlint/config-conventional'],
};
10、测试
git commit -m '修复了bug' // ×
git commit -m 'fix: 修复了bug' // √
通过分别执行以上代码我们发现,当提交的信息不符合规范时,Git Hooks 拒绝了我们的提交。
总结
Git husky 是一个 Git hooks 管理的工具,它可以帮助我们在代码提交时运行脚本,确保代码提交符合特定的规范和约定。
-
通过
husky可以自动化地运行脚本,避免了手动操作的繁琐性,提高了效率。 -
在代码提交前、提交信息保存后等多个阶段进行校验和处理,保证了代码质量和规范性。
-
可以结合其他工具和规范进行使用,如
ESLint、Prettier、commitlint等,增加了灵活性和可扩展性。
写在最后
感谢你的阅读~
如果你有任何的疑问欢迎您在后台私信,我们一同探讨学习!
如果觉得这篇文章对你有所帮助,点赞、在看是最大的支持!
相关文章:
配置 Git Husky 代码提交约束
介绍 Git Husky 是一个可以管理 Git Hooks 的工具,它可以帮助我们在代码提交的时候运行脚本,以确保代码提交符合特定的规范和约定。 在 Git 中,允许在操作特定的事件时执行特定的脚本,这些事件我们称之为 Hooks。 Git Husky 利…...
IntelliJ IDEA 2023.1 最新变化
文章目录IntelliJ IDEA 2023.1 最新变化一. 主要更新1. 新 UI 增强 测试版启用新 UI2. 在项目打开时更早提供 IDE 功能3. 更快地导入 Maven 项目4.后台提交检查5. Spring Security 匹配器和请求映射的导航 Ultimate二. 用户体验1. 全 IDE 缩放2. 保存多个工具窗口布局的选项3. …...
stm32学习笔记-9 USART串口
9 USART串口 文章目录9 USART串口9.1 串口通信协议9.2 stm32的片上外设-USART9.3 USART收发相关实验9.3.1 实验1:串口发送9.3.2 实验2:移植printf函数9.3.3 实验3:串口发送接收9.4 USART串口数据包9.5 USART数据包相关实验9.5.1 实验1&#x…...
【蓝桥杯】每日四道编程题(两道真题+两道模拟)| 第四天
专栏: 蓝桥杯——每日四道编程题(两道真题两道模拟) “蓝桥杯就要开始了,这些题刷到就是赚到” ₍ᐢ..ᐢ₎♡ 另一个专栏: 蓝桥杯——每日四道填空题(两道真题两道模拟题) 目录 专栏࿱…...
大家有没有时候觉得,递归,分治,回溯,傻傻分不清楚?
递归,分治,回溯的定义 递归(Recursion) 递归是一种解决问题的方法,它将一个问题分解成一个或多个较小的相同类型的子问题,然后通过递归调用自身来解决这些子问题。递归通常包括一个基本情况(b…...
Java 8 - Lambda 表达式
1. 函数式接口 当一个接口中只有一个非 default 修饰的方法,这个接口就是一个函数式接口用 FunctionalInterface 标注 1)只有一个抽象方法 FunctionalInterface public interface MyInterface {void print(int x); } 2)只有一个抽象方法和…...
【Ruby学习笔记】4.Ruby 类和对象及类案例
前言 本章介绍Ruby的类和对象及类案例。 Ruby 类和对象 Ruby 是一种完美的面向对象编程语言。面向对象编程语言的特性包括: 数据封装数据抽象多态性继承 这些特性将在 面向对象的 Ruby 中进行讨论。 一个面向对象的程序,涉及到的类和对象。类是个别…...
分享一个计算表格内单元格合并的工具,支持行合并、列合并等常见场景
分享一个计算表格内单元格合并的工具,支持行合并、列合并等常见场景 效果图 安装 cj-toolkit-x/table-cell-merger 插件 npm i cj-toolkit-x/table-cell-merger使用方法 import {TableCellMerger} from "cj-toolkit-x/table-cell-merger" // 创建一个单…...
CUDA编程(三):Hello world
CUDA编程(三):Hello worldCUDA编程Hello worldCUDA编程 CUDA是Compute Unified Device Architecture的缩写,由英伟达公司2007年开始推出,初衷是为GPU增加一个易用的编程接口,让开发者无需学习复杂的着色语…...
二十九、String的不可变性
一、String的基本特性 1.String:字符串,使用一对“”引起来表示 1)String s1 “hallo”; //字面量的定义方式 2)String 说 new String(“hello”)’ 2.String声明为final的,不可被继承。 3.String实现了Serialzable接口:表示字符串是支持序列化的。实…...
TCP服务器如何使用select处理多客户连接
TCP是一种面向连接的通信方式,一个TCP服务器难免会遇到同时处理多个用户的连接请求的问题,本文用一个简化的实例说明如何在一个TCP服务器程序中,使用select处理同时出现的多个客户连接,文章给出了程序源代码,本文假定读者已经具备了基本的socket编程知识,熟悉基本的服务器…...
python字符编码
目录 ❤ 前言 文本编辑器存取文件的原理(nodepad,pycharm,word) python解释器执行py文件的原理 ,例如python test.py 总结 ❤ 什么是字符编码? ASCII MBCS Unicode ❤ 字符编码的发展史 阶段一: 现代计算…...
面向对象练习题(8)
目录 第一题 第二题 第三题 第一题 思路分析: 1.Person p new Student();这就是一个向上转型,让父类的引用指向子类的对象,但是向上转型不能访问子类的属性和方法 我们在写代码时看的是编译类型 在运行是看的是运行类型 p.run(); p.eat(); …...
重构类关系-Extract Interface提炼接口八
重构类关系-Extract Interface提炼接口八 1.提炼接口 1.1.使用场景 若干客户使用类接口中的同一子集,或者两个类的接口有部分相同。将相同的子集提炼到一个独立接口中。 类之间彼此互用的方式有若干种。“使用一个类”通常意味用到该类的所有责任区。另一种情况…...
vivo手机各系列简介和拆解
Vivo是中国智能手机制造商,其产品线较多,主要包括以下系列: X系列:X系列是Vivo的高端智能手机系列,注重出色的拍照性能、高质量的音效和高端的设计。该系列主要面向追求高质量拍照和高端体验的用户。 V系列࿱…...
Redis:redis通用命令;redis常见数据结构;redis客户端;redis的序列化
一、redis命令 1.redis通用命令 Redis 通用命令是一些 Redis 下可以作用在常用数据结构上的常用命令和一些基础的命令 常见的命令有: keys 查看符合模板的所有key,不建议在生产环境设备上使用,因为keys会模式匹配所有符合条件的key&#…...
Java新特性
switch Java中switch的三种用法方式 JAVA中的switch Java switch 中如何使用枚举? 注解 天天用注解你真的知道怎么用吗?Java中的注解及其实现原理。 JAVA注解 JAVA注解 基础 集合判空 求和 Java8之List求和 JAVA中对list使用stream对某个字段求和…...
Java_Spring:8. Spring 中 AOP 的细节
目录 1 说明 2 AOP 相关术语 3 学习 spring 中的 AOP 要明确的事 4 关于代理的选择 1 说明 spring 的 aop通过配置的方式,实现上一章节的功能。 2 AOP 相关术语 Joinpoint(连接点): 所谓连接点是指那些被拦截到的点。在 spring 中,这些点指的是方法,因为 spring …...
uni-app--》uni-app的生命周期讲解
🏍️作者简介:大家好,我是亦世凡华、渴望知识储备自己的一名在校大学生 🛵个人主页:亦世凡华、 🛺系列专栏:uni-app 🚲座右铭:人生亦可燃烧,亦可腐败…...
fastp软件介绍
fastp软件介绍1、软件介绍2、重要参数解析2.1 全部参数2.2 使用示例2.3 重要参数详解(1)UMI去除(2)质量过滤(3)长度过滤(4)低复杂度过滤(5)adapter过滤&#…...
GitHub OCaml项目:C++后端突破与代码编译新变革
【导语:GitHub的OCaml项目迎来重要升级,开发者stedolan提交补丁为ocamlc添加新的C后端,改进运行时和FFI使用的非增量C代码,这一突破将为代码编译带来新的可能。】OCaml新添C后端:代码编译新途径开发者stedolan希望将2次…...
解决图像修复与纹理合成难题的Resynthesizer:开源智能填充工具全指南
解决图像修复与纹理合成难题的Resynthesizer:开源智能填充工具全指南 【免费下载链接】resynthesizer Suite of gimp plugins for texture synthesis 项目地址: https://gitcode.com/gh_mirrors/re/resynthesizer 在数字图像处理领域,我们经常面临…...
用鲸鱼优化算法(WOA)整定PID参数:Matlab与Simulink实战
鲸鱼优化算法(WOA)整定 PID 参数,m 文件加 simulink仿真,仿真程序给出适应度优化曲线,参数优化曲线以及优化对比波形,适用 matlab 2021b 及以上版本在自动控制领域,PID控制器因其结构简单、稳定…...
OpenClaw+Qwen3.5-9B:科研党的文献综述加速器
OpenClawQwen3.5-9B:科研党的文献综述加速器 1. 为什么需要AI辅助文献处理 去年冬天,我在准备一篇关于量子计算在金融领域应用的综述论文时,遇到了所有科研人共同的噩梦:堆积如山的PDF文献。下载了87篇相关论文后,光…...
解锁Windows全版本安装自由:MediaCreationTool.bat实战指南
解锁Windows全版本安装自由:MediaCreationTool.bat实战指南 【免费下载链接】MediaCreationTool.bat Universal MCT wrapper script for all Windows 10/11 versions from 1507 to 21H2! 项目地址: https://gitcode.com/gh_mirrors/me/MediaCreationTool.bat …...
驱动管理工具:释放磁盘空间的开源解决方案
驱动管理工具:释放磁盘空间的开源解决方案 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 当你的系统频繁弹出磁盘空间不足警告,而C盘又找不到明显的大文件时&am…...
GPEN老照片修复案例:增强前后对比,效果直观展示
GPEN老照片修复案例:增强前后对比,效果直观展示 1. 引言:老照片修复的痛点与解决方案 翻开泛黄的相册,那些承载着珍贵记忆的老照片往往因为年代久远而变得模糊、褪色甚至破损。传统的手工修复不仅耗时耗力,还需要专业…...
NaViL-9B多场景应用:医疗报告图解、工业缺陷识别、文档智能审阅
NaViL-9B多场景应用:医疗报告图解、工业缺陷识别、文档智能审阅 1. 平台简介 NaViL-9B是上海人工智能实验室研发的原生多模态大语言模型,具备强大的文本理解和图像分析能力。不同于传统单一模态模型,NaViL-9B能够同时处理纯文本问答和图片理…...
CES Asia 2026打造低空经济生态圈:从整机到核心部件全链覆盖
北京,2026年3月31日电——低空经济产业正迈向全链协同、规模化落地的关键阶段。CES Asia 2026将于6月10—12日在北京举办,以全产业链覆盖精准供需对接资本赋能为核心,构建从整机到核心部件的完整低空经济生态圈,助力企业一站式打通…...
汽车电子电气架构演进:从分布式 ECU 到中央计算平台
目录 一、电子电气架构的六大演进阶段 二、高性能处理器与软件平台重构 三、宝马分层式电子电气架构设计 四、中央通信服务器与可扩展网络 五、车云一体架构与软件开发变革 六、架构升级代码示例:SOA 服务注册与调用 七、中央计算平台配置示例(代码…...
