当前位置: 首页 > news >正文

Git Hooks 和 自动生成 Commit Message

前言:
企业编程必须始终依赖流程,而不是个人。个人能力很重要,应该鼓励,但不能指望它,否则软件质量将不一致,没有可持续性。一旦顶级程序员跳槽,公司就会陷入困境。企业应该努力改进工作流程,而不是努力改进人员,始终坚持流程优先于人员。

文章目录

    • Git hooks
      • 常见的 Hook 类型
      • Husky
        • Husky 初始化
        • 添加新的 hook
      • Lint-staged
    • 自动生成 Commit Message
    • commitlint

Git hooks

  在团队协作开发中,代码规范的一致性和提交质量至关重要。Git Hook 是 Git 版本控制系统提供的强大机制,它允许开发者在特定 Git 事件(如提交代码、推送变更等)发生时触发自定义脚本。这些钩子脚本就像代码世界的自动哨兵,能在关键时刻执行预设的质量检查。

常见的 Hook 类型

钩子类型触发时机典型应用场景
pre-commit提交消息输入前代码风格检查,单元测试
commit-msg提交消息保存时校验提交信息格式
pre-push推送到远程仓库前集成测试,构建验证
post-merge合并操作完成后依赖安装,环境配置

Git Hook 默认存储在 .git/hooks 目录中,

在这里插入图片描述

Husky

   Git Hook 都是使用 shell 脚本实现的,对不不熟悉 shell 脚本的人来说不太容易,所以有了 Husky, 它是一个流行的 npm 包,用于简化 Git Hook 的管理。它允许你

  1. 将 Hooks 保存在项目中,随代码提交
  2. 使用 npm scripts 管理 Hooks
  3. 支持跨平台(Windows、macOS、Linux)
  4. 生态集成:无缝对接 ESLint、Prettier 等工具链
Husky 初始化
# 安装 Husky
npm install husky --save-dev# 初始化Husky   同时会自动插入 "prepare": "husky", 到package.json
npx husky init

v8.0 之前的 Husky 使用 npx husky install 来初始化Husky,V8版本弃用。npx husky init 初始化 husky.
所以当使用 npx husky install 命令的时候会报错 husky - install command is DEPRECATED
为什么 husky install 被弃用?
在 Husky 8.x+ 版本中,开发者移除了手动初始化命令,转而通过 npm 生命周期脚本 自动管理钩子。官方认为:

  1. 手动初始化容易遗漏(尤其在新成员加入项目时)
  2. 自动初始化更符合现代 Node.js 项目规范
添加新的 hook

执行 echo "npm lint" > .husky/pre-commit 命令,将npm lint 命令添加到 pre-commit ,每次 commit 之前就会执行 npm lint 只要 npm lint 返回非 0,就会阻断提交。

// package.json
{"scripts": {"lint": "eslint . --fix",}
}

Lint-staged

  每次提交前会执行代码检查,如果项目文件特别多,每次提交时都会花费相当多的时间,所以就有了 lint-stage .它会根据配置使用对应的代码检查工具校验 stage 的文件,而不是所有的文件。也就是只检查变化了的文件。

安装 lint-staged

npm install --save-dev lint-staged # requires further setup

配置 lint-staged

{
...."lint-staged": {"*.{js,jsx,ts,tsx}": ["eslint --fix"],"*.{json,md,yaml,yml}": ["prettier --write"]....}

自动生成 Commit Message

  每次提交都要填写 Commit Message 以方便其它人了解其中的改动,改动较多或者复杂的时候,写起来比较麻烦。最新版的 VS Code 已经支持通过 Copilot 来辅助生成 Commit Message,安装 Github Copilot 插件并登录之后,点击 源码管理 面板的 Commit Message 输入框后方的Copilot 图标即可自动生成 Commit Message

在这里插入图片描述

  Copilot 默认生成的 Commit Message 只有一段描述,有时候中英文还不一定。为了生成一份标准格式的 Commit Message 我们可以通过配置文件,告诉 Copilot 应该生成一份什么样的 Commit Message。在 VS Code 的配置文件中添加如下配置:

  {..."github.copilot.chat.commitMessageGeneration.instructions": [{"file": ".vscode/.copilot-commit-message-instructions.md"}]...}

  然后再根据 file 指定的位置添加对应的 md 文件。 文件内容就是对要生成的 Commit Message 的要求,可以让 Copilot 或者 DeepSeek 辅助生成一份

在这里插入图片描述
然后再点击生成按钮,就可以生成符合标准的 Commit Message 了。

在这里插入图片描述

commitlint

commitlint 是用来校验 Commit Message 是否符合标准的,就不讲了,Copilot 生成的一般都是符合标准的 LOL。

相关文章:

Git Hooks 和 自动生成 Commit Message

前言: 企业编程必须始终依赖流程,而不是个人。个人能力很重要,应该鼓励,但不能指望它,否则软件质量将不一致,没有可持续性。一旦顶级程序员跳槽,公司就会陷入困境。企业应该努力改进工作流程&am…...

【小明剑魔视频Viggle AI模仿的核心算法组成】

Viggle AI 作为一款先进的生成式视频AI工具,其核心技术栈融合了多项前沿算法。以下是深度解析其核心算法架构及实现原理: 一、核心算法组成 1. 运动控制生成(Motion Control Generation) 算法框架:基于扩散模型&…...

Linux学习心得问题整理(二)

day05 Linux基础入门 Linux语法解析 如何理解ssh远程连接?如何使用ssh使用远程连接服务? ssh进也称远程服务终端,常见连接方式可以包括windows和Linux两种方式 首先咱们使用windows窗口进行连接,这里就采用xshell连接工具来给大家做演示吧…...

百度网盘加速补丁v7.14.1.6使用指南|PC不限速下载实操教程

软件介绍 本加速补丁可突破百度网盘限速限制,无需会员、无次数限制,实测下载速度可达带宽峰值。 三步极速配置教程 1. 环境准备 → 卸载电脑原有百度网盘客户端(避免冲突) → 关闭杀毒软件/安全卫士(防止误删补丁&am…...

RocketMQ消息拉取模式详解

RocketMQ提供了两种消息拉取模式,Pull模式(主动拉取)和 Push模式(长轮询)。 一、消息拉取模式分类 1. Pull模式(主动拉取) 特点:消费者主动向Broker发送请求拉取消息实现类&#…...

C++23 容器从其他兼容范围的可构造性与可赋值性 (P1206R7)

文章目录 背景与动机提案内容与实现细节提案 P1206R7实现细节编译器支持 对开发者的影响提高灵活性简化代码向后兼容性 总结 C23标准引入了对容器构造和赋值的新特性,这些特性使得容器能够更灵活地从其他兼容范围初始化,并支持从范围赋值。这些改进由提案…...

深入解析 HTTP 中的 GET 请求与 POST 请求​

在互联网的世界里,数据的传输与交互无时无刻不在发生。HTTP(超文本传输协议)作为 Web 应用的基石,承载着浏览器与服务器之间的通信重任。而 GET 请求和 POST 请求,作为 HTTP 协议中最为常用的两种请求方法,…...

华三(H3C)IRF堆叠心跳的LACP MAD、BFD MAD和ARP MAD差异

华三(H3C)IRF堆叠心跳的三种MAD(多主检测)机制——LACP MAD、BFD MAD和ARP MAD在实现原理、组网要求及适用场景上存在显著差异。以下是三者的对比分析: 一、核心区别对比 特性LACP MADBFD MADARP MAD检测原理扩展LAC…...

thread 的mutex优化

std::mutex mtx; int shared_data 0;void increment() {std::lock_guard<std::mutex> lock(mtx); // 自动加锁shared_data; // 临界区 } // 离开作用域时自动解锁std::lock_guard 在离开作用域时自动解锁的行为是基于 C 的 RAII (Resource Acquisition Is Initializa…...

深入解析前端 JSBridge:现代混合开发的通信基石与架构艺术

引言&#xff1a;被低估的通信革命 在移动互联网爆发式增长的十年间&#xff0c;Hybrid App&#xff08;混合应用&#xff09;始终占据着不可替代的地位。作为连接 Web 与 Native 的神经中枢&#xff0c;JSBridge 的设计质量直接决定了应用的性能上限与开发效率。本文将突破传…...

打破次元壁,VR 气象站开启气象学习新姿势​

在教育领域&#xff0c;VR 气象站同样发挥着巨大的作用&#xff0c;为气象教学带来了全新的模式&#xff0c;打破了传统教学的次元壁&#xff0c;让学生们以全新的姿势学习气象知识。​ 在传统的气象教学中&#xff0c;学生们主要通过课本、图片和老师的讲解来学习气象知识。这…...

python八股文汇总(持续更新版)

python装饰器 一、装饰器是什么&#xff1f; 装饰器是Python中一种"化妆师"&#xff0c;它能在不修改原函数代码的前提下&#xff0c;给函数动态添加新功能。 本质&#xff1a;一个接收函数作为参数&#xff0c;并返回新函数的工具。作用&#xff1a;像给手机贴膜…...

C#入门系列【基础类型大冒险】从0到1,解锁编程世界的“元素周期表”

C#入门系列【基础类型大冒险】从0到1&#xff0c;解锁编程世界的“元素周期表” 嘿&#xff0c;欢迎来到C#的奇妙世界&#xff01;如果把编程比作建造一座大厦&#xff0c;那么基础类型就是我们手中的“砖块”和“水泥”。它们看似普通&#xff0c;却构成了所有复杂程序的基石…...

物流项目第四期(运费模板列表实现)

前三期&#xff1a; 物流项目第一期&#xff08;登录业务&#xff09;-CSDN博客 物流项目第二期&#xff08;用户端登录与双token三验证&#xff09;-CSDN博客 物流项目第三期&#xff08;统一网关、工厂模式运用&#xff09;-CSDN博客 模板列表 在后台系统中&#xff0c…...

数据中心Overlay解决方案

文档围绕数据中心 Overlay 解决方案展开,指出数据中心向大集中、虚拟化、云业务演进,传统架构存在网络规划复杂、弹性不足、业务扩展受限等问题。Overlay 网络在物理网络上构建虚拟网络,实现名址分离、网络与物理解耦,支持业务灵活部署。方案采用VXLAN 技术(如 SDN 控制模…...

中级网络工程师知识点8

1.无线控制器&#xff1a;实现无线网络统一管理&#xff0c;无缝漫游 2.无线认证系统&#xff1a;实现用户使用用户名和密码认证登录&#xff0c;外来访客通过扫描二维码或者手机短信验证登录无线网络 3.POE交换机&#xff1a;实现无线AP的接入和供电 4.高密吸顶式AP&#x…...

【Linux笔记】——简单实习一个日志项目

&#x1f525;个人主页&#x1f525;&#xff1a;孤寂大仙V &#x1f308;收录专栏&#x1f308;&#xff1a;Linux &#x1f339;往期回顾&#x1f339;&#xff1a; 【Linux笔记】——线程同步信号量与环形队列生产者消费者模型的实现(PV操作) &#x1f516;流水不争&#xf…...

BRIGHTONE : 520-On-Chain WOHOO Carnival

BRIGHTONE is launching the “520-On-Chain WooHoo Carnival,” and the very first blast of $WOOHOO goes live right on schedule—ushering in a new on-chain celebration of joy! ​At exactly 21:09 on May 20, the “520-On-Chain WooHoo Carnival” officially kicks…...

在Java项目中集成Deepseek大语言模型实践指南

1. 引言 随着人工智能技术的发展&#xff0c;大语言模型在各领域应用日益广泛。本文将详细介绍如何在Java项目中集成Deepseek大模型&#xff0c;实现智能文本生成、对话等功能。 2. 前期准备 准备Java Spring Boot项目环境确保Maven已配置注册Deepseek账号并获取API密钥 获取a…...

医疗影像中,DICOM点云、三角面片实体混合渲染(VR)

此文章&#xff0c;涉及到专业性比较强&#xff0c;所以&#xff0c;大部分的内容&#xff0c;基本上都是示例代码的形式出现。以下的技术路径&#xff0c;完全经过实践验证&#xff0c;并且效果很好&#xff0c;可以放心使用。 1 概述 在医学影像中&#xff0c;对DICOM的渲染…...

程序运行报错分析文档

zryhuawei:~/src/modules/Connect$ ./newbuild/OpConnectAidTool \WARNING: MYSQL_OPT_RECONNECT is deprecated and will be removed in a future version. replace into process_tracking (step_id,date,status,context_data,start_time,end_time,error_log) values(?,?,?…...

C++数据结构——红黑树

文章目录 一、背景二、关键操作1. 旋转2. 变色3. 查找4. 插入5. 删除 三、面试考点 一、背景 红黑树&#xff08;Red-Black Tree&#xff09;是一种自平衡的二叉搜索树&#xff08;BST&#xff09;&#xff0c;通过颜色标记和旋转操作保证树的高度平衡&#xff0c;从而确保插入…...

【Java实战】线程池 并发 并行 生命周期(详细解释)

线程池&#xff1a; 一种复用线程的技术 不使用线程池的问题&#xff1a; 用户每提出一个需求&#xff0c;都要创建一个新的线程。 创建线程池的方法&#xff1a; JDK 5.0起提供了一个代表线程池的接口&#xff1a;ExecutorService。 方式一&#xff1a; 使用ExecutorServic…...

Qwen3多方位评测

一、Qwen3核心优势 结论&#xff0c;针对这些场景&#xff1a;上下文理解、任务编排、工具调用、数据要素抽取等环节&#xff0c;Qwen3-32B已接近DeepSeek-R1。 二、关键测试环节 1、上下文改写 Qwen3-32B对绝对时间语境理解优于Qwen2.5-72B。 其余改写方面&#xff0c;三…...

银行反欺诈理论、方法与实践总结(下):解决方案

一、金融反欺诈防控体系 反欺诈防控体系是金融机构应对欺诈风险的重要工具&#xff0c;它通常包括事前识别、事中决策和事后处置三个关键阶段。 事前识别阶段&#xff1a;此阶段涉及欺诈情报的收集和账户安全的保护&#xff0c;通过名单和画像的构建来识别潜在风险。例如&…...

自回归图像编辑 EditAR: Unified Conditional Generation with Autoregressive Models

Paperhttps://arxiv.org/pdf/2501.04699 Code (coming soon) 目录 方法 实验 EditAR是一个统一的自回归框架&#xff0c;用于各种条件图像生成任务——图像编辑、深度到图像、边缘到图像、分割到图像。 next-token预测的功效尚未被证明用于图像编辑。 EditAR主要构建在Ll…...

Java中的集合详解

下面是文章详细介绍了 Java 集合框架的基本思路、主要接口与实现、各类集合之间的区别与各自的适用场景&#xff0c;以及一些常见的使用技巧和最佳实践&#xff0c;供你参考。 Java中的集合详解 在 Java 开发中&#xff0c;集合&#xff08;Collection&#xff09;作为存储和操…...

前端mjs和js文件区别,mjs和cjs区别---.es.js和.mjs的区别

https://www.cnblogs.com/jocongmin/p/18432236 同一份配置如下,一般打包出来的结果时是一样的,只不过扩展名不一样 export default defineConfig({build: {rollupOptions: {output: [// 同一份配置&#xff0c;仅扩展名不同{ format: es, entryFileNames: [name].mjs },{ fo…...

【深度学习】Transformer 的应用

目录 一、自然语言处理领域 1、自然语言处理领域的应用 2、BART模型 3、BERTSum模型与自动文本摘要 4、SG-Net与机器阅读理解 5、SG-Net的应用 6、总结 二、计算机视觉领域 1、图像分类 &#xff08;1&#xff09;背景与挑战 &#xff08;2&#xff09;Transformer的…...

C#学习10——泛型

一、什么是泛型&#xff1f; 官方理解&#xff1a;允许开发者在定义类、接口、方法或委托时使用类型参数 个人理解&#xff1a; 类型模具&#xff08;类似Object变色龙&#xff09; 二、泛型有什么用&#xff1f; 通过参数化类型实现代码复用&#xff0c;提升类型安全性并…...

Spring Validation校验

使用 JSR 303 (Bean Validation) 校验接口参数 JSR 303&#xff0c;也称为Bean Validation规范&#xff0c;提供了一种在Java应用程序中执行验证的标准化方式。它允许你通过注解直接在领域或者DTO&#xff08;数据传输对象&#xff09;类上定义校验规则。 1. 添加依赖 首先需…...

精益数据分析(72/126):MVP的核心法则——消除阻碍与聚焦关键指标

精益数据分析&#xff08;72/126&#xff09;&#xff1a;MVP的核心法则——消除阻碍与聚焦关键指标 在创业领域&#xff0c;许多失败案例源于对产品开发的认知偏差——过度追求功能完善或盲目跟风增长&#xff0c;却忽略了用户核心需求的最直接满足。今天&#xff0c;我们结合…...

从头实现react native expo本地生成APK

根据github上老外的经验制作了一个react native expo项目起始模版,准备放到资源下载里(已经免积分放置好),这个起始模版带有个人非常喜欢的tailwindcss,由于raact native使用sheetstyle这种风格的样式,不太喜欢.当然,我们使用react native paper组件库时,就要对组件库里的组件使…...

打卡第二十三天

仔细回顾一下之前21天的内容&#xff0c;没跟上进度的同学补一下进度。 作业&#xff1a; 自行学习参考如何使用kaggle平台&#xff0c;写下使用注意点&#xff0c;并对下述比赛提交代码。 使用Kaggle平台的注意点 Kaggle是一个数据科学竞赛平台&#xff0c;提供了丰富的数据…...

关于汇编语言与接口技术——单片机串行口的学习心得

学习目标&#xff1a; 1.了解AT89S51单片机片内串行口的基本工作原理 2.掌握与串行口有关的特殊功能寄存器以及四种工作方式 一、串行口内部结构 单片机串行口有两个独立的接收、发送缓冲器SBUF&#xff0c;属于特殊功能寄存器&#xff0c;可以同时发送、接收数据&#xff1b…...

汇川PLC通过Profinet转ModbusTCP网关读取西门子PLC数据案例

Modbus TCP主站即Modbus TCP客户端&#xff0c;Modbus TCP主站最多支持同时与31个Modbus TCP从站 。&#xff08;Modbus TCP服务器&#xff09;进行通信。 第一步设置PLC IP地址&#xff1b; 默认PLC IP地址为192.168.1.88。根据需要判断是否需要修改。 第二步添加Modbus TCP…...

2025-05-20 模型下载--文本向量化--Faiss检索

模型下载 使用Python脚本进行下载 from huggingface_hub import snapshot_download # import os# os.environ["HF_ENDPOINT"] "https://hf-mirror.com" # 自定义下载目录&#xff08;Windows 路径建议用 raw string 或 pathlib&#xff09; download_di…...

idea本地debug断点小技巧

idea本地debug断点小技巧 简单的设置断点条件 断点后&#xff0c;右键这个断点&#xff0c;可以在 condition 中填写能得出布尔的表达式 a 1 你如果写如下&#xff0c;表示先给他赋值&#xff0c;然后断住 a 2; true 断点后设置某个变量的值 在 debug 区域可以设置变量…...

Mybatis面向接口编程

添加与Mapper接口的映射 <!--UserMapper.xml--> <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> …...

谈谈对《加密算法》的理解

文章目录 一、什么是加密算法&#xff1f;二、常见的加密算法有哪些&#xff1f;2.1 对称加密2.2 非对称加密2.3 哈希算法 三、加密算法代码展示3.1 MD5加密3.2 秘钥加密3.3 AES加密解密 四、加密算法的使用场景 一、什么是加密算法&#xff1f; 加密算法是一种通过数学方法将…...

代码随想录算法训练营第60期第四十二天打卡

大家好&#xff0c;今天还是继续我们的动态规划里面的背包问题&#xff0c;前面我们主要接触的是0-1背包和完全背包&#xff0c;其实这两个背包问题主要就是看看每一件物品我们是否有多件&#xff0c;如果每一件物品我们只能取一次的话那这样我们就是0-1背包&#xff0c;如果每…...

Java并发进阶系列:深度讨论官方关于jdk1.8ConcurrentHashMap的computeIfAbsent源代码修复逻辑

在文章中《深度解析官方关于jdk1.8的resizeStamp的bug处理过程》&#xff0c;我们讨论关于CHM的核心设计——resizeStam需要修复的处理过程&#xff0c;本文再次基于openJDK的bugs讨论组提出的CHM源代码另外一个会造成死循环的bug&#xff0c;默认读者已经掌握CHM的核心源代码实…...

npm vs npx 终极指南:从原理到实战的深度对比 全面解析包管理器与包执行器的核心差异,助你精准选择工具

npm vs npx 终极指南&#xff1a;从原理到实战的深度对比 全面解析包管理器与包执行器的核心差异&#xff0c;助你精准选择工具 一、核心定位差异 #mermaid-svg-xM2GZt0lejj6hYk6 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}…...

RK3588 IREE+Vulkan ResNet50推理测试

RK3588 IREE+Vulkan ResNet50推理测试 背景一.性能数据【暂不考虑该框架】二.操作步骤2.1 搭建NFS服务,解决IREE编译时,空间不足的问题2.2 编译、安装`IREE`2.2.1 挂载NFS2.2.2 安装依赖2.2.3 编译`IREE`2.2.4 获取驱动及设备信息2.2.5 下载推理图片2.2.6 生成`onnx`模型转换脚…...

Blaster - Multiplayer P77-P89: 武器瞄准机制

P78_ Blaster HUD And Player Controller P78_1 创建PC和HUD P78_2 Tick Component > SetHUDCrosshairs() P79_ Drawing the Crosshairs DrawHUD() Call Every Tick. #include "HUD/BlasterHUD.h"void ABlasterHUD::DrawHUD() {Super::DrawHUD();FVector2D View…...

【每天一个MCP】【记录向】:准备工作,创建github项目

记录一下&#xff1a; 新建一个仓库 各种填写项目信息 点击创建 &#x1f446;不错&#xff0c;开张了~ 尝试一下这个桌面版的github 登录 果然方便 太高级了。~...

元宇宙中的虚拟经济:机遇与挑战

随着元宇宙概念的兴起&#xff0c;虚拟经济逐渐成为全球科技和经济领域关注的焦点。元宇宙不仅是一个虚拟的社交和娱乐空间&#xff0c;更是一个充满经济活动的全新生态系统。从虚拟货币到数字资产&#xff0c;从虚拟商品交易到去中心化金融&#xff08;DeFi&#xff09;&#…...

多环境回测模拟不同市场条件下的策略表现

Backtrader库的核心组件包括数据源、策略、执行引擎和结果分析器。通过组合这些组件,可以构建一个完整的交易系统。 在进行回测之前,需要准备历史市场数据。Backtrader支持多种数据格式,如CSV文件、Pandas数据框等。 加载数据 可以使用Backtrader提供的bt.feeds.YahooFina…...

nRF Connect SDK开发之(1)环境搭建

目录 一、安装 nRF Connect SDK 开发环境 1)git 2)python 3) J-Link ​编辑 4)nrfutil 1.将nrfutil应用程序所在目录添加到系统路径PATH 2.在命令行中输入nrfutil检测是否可以正常运行 3.运行命令以列出可用命令:nrfutil search 4.安装 device 、toolchain-man…...

武汉火影数字|数字展厅展馆制作:沉浸式体验,全方位互动

在科技飞速发展的当下&#xff0c;数字技术正以前所未有的速度渗透到各个领域&#xff0c;展厅展馆行业也不例外。数字展厅展馆作为传统展厅展馆的创新升级&#xff0c;正逐渐成为展示领域的新宠&#xff0c;为观众带来前所未有的沉浸式体验。 与传统展厅相比&#xff0c;数字展…...