前端限制 git commit 提交格式

news2024/9/29 15:20:07

团队开发中,每个人 git commit 的习惯都不一样,这样不利于对更新日志的筛选,也可以防止同事跑路后,出现 bug 后,看不懂他当时提交的日志究竟是改了个 bug 还是新增了一个功能,影响开发效率。

这时候就需要用到 git commit 提交规范的工具。为什么一定要用工具规范,定义个提交规范的文档,让大家自行遵守不就好了。这个想法很美好,现实却很骨感,在头脑风暴之后,脑子乏了,可能就会忘记公司规定的提交格式规范,习惯性的用自己之前的提交习惯,造成不必要的麻烦。

使用工具进行规范,如果提交的格式不正确,会给出相应的提示,也无法将 commit 进行提交,需要修改成正确格式的 commit 才能安全的提交到 git 仓库。

配置 commitlint

commitlint 可以检查你的 git commit 日志是否符合你配置的规则,这跟规范 JavaScript 格式的 Eslint 非常像。commitlint 是一个 npm 上的工具,所以需要在 npm init 初始化之后的项目才能使用。

在需要限制 git commit 的项目下安装 commitlint :

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

安装完成后,在项目根目录下,新建一个 .commitlintrc.json 文件,写入如下配置。

{ "extends": ["@commitlint/config-conventional"] } 

extends 属性,代表继承某个配置,上边继承了 @commitlint/config-conventional 这个配置文件,把它当成默认配置文件即可。

配置 husky

husky 是一个 git hook 工具,这个工具,可以在 git 执行某些命令之前或者之后再添加一些我们自己的命令,学过 vue 的,可以理解为是 git 的生命周期函数工具。

在当前项目下安装 husky :

npm install husky --save-dev 

激活 hook ,执行完下面的命令后,会在项目根目录下创建出一个名字 .husk 我文件夹,里边是存放 hook 脚本的地方:

npx husky install 

添加一个 hook,就跟 vue 写了个 onMounted 方法类似,执行完后,.husky 文件夹下边会多出一个 commit-msg 的脚本文件:

npx husky add .husky/commit-msg'npx --no -- commitlint --edit ${1}' 

这句命令大概意思就是,在执行 git commit -m 'xxx' 这句命令时,使用 commitlint 检查 'xxx' 的内容格式是否符合规则。不符合规则,会停止 git commit -m 并输出错误提示。

这样一个基础的 git commit 格式校验就配置好了,随便 git add 一些文件,然后执行 git commit -m 'xxx' 试试效果,下边我就放的官方例子:

saltedfish@DESKTOP-623RCE5 MINGW64 /d/code/commitlint-demo (master)
$ git add .

saltedfish@DESKTOP-623RCE5 MINGW64 /d/code/commitlint-demo (master)
$ git commit -m "foo: this will fail"
⧗ input: foo: this will fail
✖ type must be one of [build, chore, ci, docs, feat, fix, perf, refactor, revert, style, test] [type-enum]

✖ found 1 problems, 0 warnings
ⓘ Get help: https://github.com/conventional-changelog/commitlint/#what-is-commitlint

husky - commit-msg hook exited with code 1 (error) 

第 6 行开始就是提交时的报错,先提示你提交的内容是啥,然后告诉你 type 只能是中括号内的那些,你写的 foo 是不符合规则的。当把 foo 改成中括号内的 buildchoreci 等,即可通过格式校验,并正常提交 commit

saltedfish@DESKTOP-623RCE5 MINGW64 /d/code/commitlint-demo (master)
$ git commit -m "chore: lint on commitmsg"
[master (root-commit) af3dffd] chore: lint on commitmsg
 5 files changed, 2224 insertions(+)
 create mode 100644 .commitlintrc.json
 create mode 100644 .gitignore
 create mode 100644 .husky/commit-msg
 create mode 100644 package-lock.json
 create mode 100644 package.json 

commitlint 规则配置

有时候,默认的规则配置,并不适合我们的项目使用,这时,就可以使用相关配置属性,配置适合我们自己的提交规则。在了解规则怎么配置之前,需要先了解提交 commit 格式的一些概念。

type(scope?): subject
body?
footer? 

默认规则中,配置了五种在日志使用的内容,typescopedsubjectbodyfooter 。其中,typesubject 是必填项。

  • type 是一些可以自定义的提交类型,如新功能(feat)、修复 Bug(fix)等,需要怎样的格式可以自己配置。
  • subject 是简要描述,其实就是平时我们 git commit -m 'xxx' 输入的内容。

scope 我不怎么使用,大概就是用来填写一些修改了什么文件的标记之类的,body 是详细表述,就是 git commit -m 'xxx' 时,换行之后写一些详细描述,一般我也不写,有 subject 我就够用了。footer 这个我也不怎么用,具体写些啥也不是很清楚。

了解完概念后,就可以开始进行我们的配置了,只介绍一些比较常用的配置,如果提交时,遇到一些自己不喜欢的配置,可以看官方文档对应配置进行关闭。

一开始我们就配置了一个 extends 属性,这个就是继承别人写好的配置。

{ "extends": ["@commitlint/config-conventional"] } 

如果我们要覆盖 extends 的规则配置,这时候,就需要用到 rules 属性,rules 接收的一个对象({}) ,key 对应规则名,value 对应规则,是一个长度为 3 的数组([Level, Applicable, Value]) 。

  • Level 有三个值,为 0 时,代表关闭此规则,1 时,是警告,2 是错误。
  • Applicable 的值为 always | never ,为 never 时,反转规则,应该是 Level 三个值反过来的意思吧。
  • Value 就不多说了,就是配置的值。

接下来演示一个最常用的配置 rules['type-enum'] ,默认值是 ['feat', 'fix', 'docs', 'style', 'refactor', 'test', 'revert'],就是上边说到的 type 只能填哪些值。

{"extends": ["@commitlint/config-conventional"],"rules": {"type-enum": [2,"always",["✨ 新功能","🐛 修复"]],"type-empty": [0],"subject-empty": [0]}
} 

这个 type 不仅仅只是可以中文或者英文,还可以加上自己喜欢的,emoji 表情包,当用了 emoji 表情包后,type-emptysubject-empty 就只能关闭,才能正常通过校验(经验之谈)。

这样,就覆盖了我们继承的规则,详细规则配置可查看对应文档。

使用 commitizen 添加带提示的 commit 编辑

在上边的配置中,我们给我们的 type 添加了一些 emoji 表情包,当我们提交 commit 的时候,还要找半天表情包,那也太麻烦了。这时,就需要轮到 commitizen 出场了,它可以以命令行的形式编写我们的 commit。

在当前项目下安装 commitizen

npm i --save-dev commitizen 

安装完成后,在 package.json 添加一个 script 命令配置:

···
"scripts": {···"commit": "cz"···
},
··· 

commitizen 只是一个基础,还需要安装 @commitlint/cz-commitlint 才能使用:

npm install --save-dev @commitlint/cz-commitlint 

package.json 添加相关 config 配置:

···
"config": {"commitizen": {"path": "@commitlint/cz-commitlint"}
}
··· 

现在,执行 npm run commit 看看,是否会弹出一个命令行交互,如果正常,则安装成功。

saltedfish@DESKTOP-623RCE5 MINGW64 /d/code/commitlint-demo (master)
$ npm run commit

> commitlint-demo@1.0.0 commit
> cz

cz-cli@4.2.5, @commitlint/cz-commitlint@17.3.0

? Select the type of change that you're committing: 
> ✨ 新功能🐛 修复──────────────empty 

按提示完成交互后,会自动帮你执行 git commit -m 'xxx' 提交,提交的时候,又会触发 husky 的 hook 进行格式校验,校验通过后正常提交 commit 。

@commitlint/cz-commitlint 是一个插件,如果觉得不合适,可以自己研究 commitizen 的官方仓库文档,也可以自己实现自己的命令行工具来辅助提交 commit 。

最后

整理了一套《前端大厂面试宝典》,包含了HTML、CSS、JavaScript、HTTP、TCP协议、浏览器、VUE、React、数据结构和算法,一共201道面试题,并对每个问题作出了回答和解析。

有需要的小伙伴,可以点击文末卡片领取这份文档,无偿分享

部分文档展示:



文章篇幅有限,后面的内容就不一一展示了

有需要的小伙伴,可以点下方卡片免费领取

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

springboot驾校报名系统 微信小程序

系统分为用户和管理员,驾校教练三个角色 用户微信小程序端的主要功能有: 1.用户注册和登陆系统 2.用户查看驾校教练信息 3.用户查看驾校信息 4.用户查看驾校的车辆信息 5.用户查看驾校考试信息,在线报名考试 6.用户可以在线预约驾校的教练 7.…

深度学习笔记--修改、增加和删除预训练模型的特定层

目录 1--前言 2--初始化 VGG16 模型 3--修改特定层 4--新增特定层 5--删除特定层 6--固定预训练模型的权重 7--综合应用 1--前言 基于 Pytorch,以 VGG16 模型为例; 2--初始化 VGG16 模型 from torchvision import models# 初始化模型 vgg16 mo…

Java 反射详解

一、反射 1、什么是反射 反射允许对成员变量、成员方法和构造器的信息进行编程访问。 补充:暴力反射,非public修饰需要打开权限 setAccessible(boolean) 2、反射的作用 利用反射创建的对象可以无视修饰符调用类里面的内容可以跟配置文件结合起来使用,把要创建的对象…

【Jest】Jest单元测试环境搭建

文章目录前言1、项目环境搭建初始化仓库安装ts环境安装jest环境2、初始化项目文件夹前言 今天开始!!!学习vue源码,那么要学习源码前首先要了解Jest。 https://www.jestjs.cn/ 官网自带中文非常友好! 1、项目环境搭建…

【C++面试问答】搞清楚深拷贝与浅拷贝的区别

问题 深拷贝和浅拷贝的区别是面试中的常见问题之一,对于不同的编程语言,这个问题的回答可能稍有差别,下面我们就来探索一下它们之间的异同吧。 先来看看在JavaScript对象的深拷贝与浅拷贝的区别: 浅拷贝:只是复制了…

Postgresql 根据单列或几列分组去重row_number() over() partition by

Postgresql 根据单列或几列分组去重row_number() over() partition by 一般用于单列或者几列需要去重后进行计算值的 count(distinct(eid)) 可以 比如有个例子,需要根据名称,城市去筛选覆盖的道路长度,以月因为建立了唯一索引是ok的&#…

前端项目集成Vite配置一览无余

Vite配置文件 默认指定&#xff1a;vite.config.js。自定义指定&#xff1a;vite --config 自定义名称.js。 Vite相关命令 查看Vite有哪些命令&#xff1a;npx vite -help。 --host [host]// 指定域名 --port <port>// 指定端口 --https // 使用 TLSHTTP/2 --cors //…

Spring 中 ApplicationContext 和 BeanFactory 的区别

文章目录类图包目录不同国际化强大的事件机制&#xff08;Event&#xff09;底层资源的访问延迟加载常用容器类图 包目录不同 spring-beans.jar 中 org.springframework.beans.factory.BeanFactoryspring-context.jar 中 org.springframework.context.ApplicationContext 国际…

HTTP 和 HTTPS 的区别

文章目录前言一、HTTP 与 HTTPS 的基本概念HTTPHTTPS二、HTTP 和 HTTPS协议的区别前言 浏览网站时&#xff0c;我们会发现网址有两种格式&#xff0c;一种以http://开头&#xff0c;一种https://开头。好像这两种格式差别不大&#xff0c;只多了一个s&#xff0c;实际上他们有…

Java零基础教程——数组

目录数组静态初始化数组数组的访问数组的动态初始化元素默认值规则&#xff1a;数组的遍历数组遍历-求和冒泡排序数组的逆序交换数组 数组就是用来存储一批同种类型数据的容器。 20, 10, 80, 60, 90 int[] arr {20, 10, 80, 60, 90}; //位置 0 1 2 3 4数组的…

死锁的原因及解决方法

❣️关注专栏&#xff1a; JavaEE 死锁☘️1.什么是死锁☘️2.死锁的三个典型情况☘️2.1情况一☘️2.2情况二☘️2.2.1死锁的代码展示☘️2.3多个线程多把锁☘️3死锁产生的必要条件☘️3.1互斥性☘️3.2不可抢占☘️3.3请求和保持☘️3.4循环等待☘️4如何避免死锁☘️4.1避免…

【Spark分布式内存计算框架——Spark Core】6. RDD 持久化

3.6 RDD 持久化 在实际开发中某些RDD的计算或转换可能会比较耗费时间&#xff0c;如果这些RDD后续还会频繁的被使用到&#xff0c;那么可以将这些RDD进行持久化/缓存&#xff0c;这样下次再使用到的时候就不用再重新计算了&#xff0c;提高了程序运行的效率。 缓存函数 可以…

Kubernetes集群-部署Java项目

Kubernetes集群-部署Java项目&#xff08;SSG&#xff09; k8s部署项目java流程图 第一步 打包制作镜像 打包 java源码&#xff1a; application.properties #在有pom.xml的路径下执行 mvn clean package制作镜像&#xff1a; 将刚才打包后的文件夹传到&#xff0c;装有dock…

(考研湖科大教书匠计算机网络)第三章数据链路层-第十一节:虚拟局域网VLAN概述和实现机制

获取pdf&#xff1a;密码7281专栏目录首页&#xff1a;【专栏必读】考研湖科大教书匠计算机网络笔记导航 文章目录一&#xff1a;VLAN概述&#xff08;1&#xff09;分割广播域&#xff08;2&#xff09;虚拟局域网VLAN二&#xff1a;VLAN实现机制&#xff08;1&#xff09;IEE…

LeetCode题目笔记——15. 三数之和

文章目录题目描述题目链接题目难度——中等方法一&#xff1a;暴力&#xff08;参考&#xff09;代码/Python 参考方法二&#xff1a;哈希代码/Python参考方法三&#xff1a;排序双指针代码/Python代码/C总结题目描述 龙门阵&#xff1a;这个n个数之和是不是有什么深意啊&#…

Python中的类和对象(6)

文章目录1.多态2.类继承的多态3.自定义函数的多态4.鸭子类型5.思维导图1.多态 多态在编程中是一个非常重要的概念&#xff0c;它是指同一个运算符、函数或对象在不同的场景下&#xff0c;具有不同的作用效果&#xff0c;这么一个技能。 我们知道加号&#xff08;&#xff09;…

加载sklearn新闻数据集出错 fetch_20newsgroups() HTTPError: HTTP Error 403: Forbidden解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。喜欢通过博客创作的方式对所学的知识进行总结与归纳,不仅形成深入且独到的理…

大数据框架之Hadoop:入门(五)Hadoop编译源码(面试重点)

5.1 前期准备工作 1.CentOS联网 配置CentOS能连接外网。Linux虚拟机ping www.baidu.com 是畅通的 注意&#xff1a;采用root角色编译&#xff0c;减少文件夹权限出现问题 2.jar包准备(hadoop源码、JDK8、maven、ant 、protobuf) &#xff08;1&#xff09;hadoop-2.7.7-sr…

【TCP的拥塞控制】基于窗口的拥塞控制

TCP的拥塞窗口CWND大小和传输轮次n的关系如下所示。&#xff08;本题10分&#xff09; cwnd12481632333435363738394041422122232425261248N1234567891011121314151617181920212223242526 问题&#xff1a; &#xff08;1&#xff09;慢开始阶段的时间间隔&#xff1f;&#…

NFC enable NFC使能流程

同学,别退出呀,我可是全网最牛逼的 WIFI/BT/GPS/NFC分析博主,我写了上百篇文章,请点击下面了解本专栏,进入本博主主页看看再走呗,一定不会让你后悔的,记得一定要去看主页置顶文章哦。 NFC enable NFC使能流程 认识nfc系统如何工作,最好的方法就是了解nfc的各个流程,…