git检查提交分支和package.json的version版本是否一致

这里写自定义目录标题

  • 一、核心实现步骤‌
    • 1.安装必要依赖‌
    • 2.初始化 Husky‌
    • 3.创建校验脚本‌
    • 4.配置 lint-staged‌
    • 5.更新 Husky 钩子‌
  • 三、工作流程说明‌
  • 四、注意事项‌

在这里插入图片描述

以下是基于 Git Hooks 的完整解决方案,通过 husky 和自定义脚本实现分支名与版本号一致性校验:

一、核心实现步骤‌

1.安装必要依赖‌

npm install husky@9.1.4 lint-staged@15.2.9 --save-dev

husky:管理 Git 钩子
lint-staged:针对暂存区文件执行检查

2.初始化 Husky‌

npx husky-init && pnpm install

生成 .husky 目录及 pre-commit 钩子文件

3.创建校验脚本‌

在项目根目录新建 scripts/check-version.js:

import fs from "fs"
import { execSync } from "child_process"// 获取packageJson内容
const packageJson = JSON.parse(fs.readFileSync("package.json", "utf8"))// 获取当前分支名
const branchName = execSync("git rev-parse --abbrev-ref HEAD").toString().trim()if (!branchName.includes(packageJson.version)) {console.error(`版本 ${packageJson.version} 与分支名称 ${branchName} 不一致,不允许提交`)process.exit(1)
}

4.配置 lint-staged‌

修改 package.json:

{"lint-staged": {"*.{js,jsx,ts,tsx}": ["prettier --write"],"*.vue": ["prettier --write"]}"scripts": {"prettier": "npx prettier . --write","prepare": "husky install"}
}

5.更新 Husky 钩子‌

修改 .husky/pre-commit:

npx lint-staged
node scripts/check-version.js

二、校验规则定制(按需调整)‌

// 示例1: 严格匹配分支名与版本号
if (branch !== `release/v${version}`) { /*...*/ }// 示例2: 允许分支名包含版本号前缀
const versionPrefix = version.split('.').slice(0, 2).join('.');
if (!branch.startsWith(`feat/${versionPrefix}`)) { /*...*/ }

三、工作流程说明‌

步骤 触发条件 执行内容 结果处理

  • 提交代码‌ git commit 触发 pre-commit 钩子 → 执行版本校验脚本
  • pre-commit 钩子脚本:
    – npx lint-staged执行package.json的lint-staged的配置
    – node scripts/check-version.js执行检查的脚本
    — 校验通过‌ 分支名与版本号匹配 正常提交 流程继续
    — 校验失败‌ 名称不一致 输出错误信息并终止提交 返回非零状态码阻止提交

四、注意事项‌

分支命名规范‌

  • 建议采用 语义化版本+分支类型 格式(如 feat/1.2.0 或 release/1.2.0)

版本号管理‌

  • 使用 npm version 命令自动更新版本号:
npm version patch -m "升级版本至 %s"

多环境适配‌

  • 若需豁免特定分支(如 main),可在脚本中添加白名单:
const whitelist = ['main', 'master'];
if (whitelist.includes(branch)) return;
  • 该方案通过 Git 提交前强制校验,确保分支与版本号的关联性,适用于需要严格版本控制的敏捷开发场景。

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

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

相关文章

react-navigation-draw抽屉导航

心得写在前面分享给大家: 我的实现方法,并没有完全安装官网来做,而是进行了简化,效果是一样的。没有按照官网说的修改metro.config.js文件,同时也没有 react-native-gesture-handler 的安装后,我们需要有条…

【计算机视觉】CV实战项目-高分辨率遥感图像语义分割:High-Resolution-Remote-Sensing-Semantic-Segmentation

高分辨率遥感图像语义分割技术解析与实战指南 项目背景与意义核心技术解析1. **膨胀预测(Dilated Prediction)**2. **后处理优化**3. **半监督学习:伪标签(Pseudo Labeling)**4. **可视化与监控** 实战指南&#xff1a…

免费送源码:Java+SSM+MySQL 基于SSM开发的校园心理咨询平台系统的设计与实现 计算机毕业设计原创定制

目 录 1 绪论 1 1.1 研究背景 1 1.2开发现状 1 1.3论文结构与章节安排 2 2 校园心理咨询平台系统系统分析 3 2.1 可行性分析 3 2.1.1 技术可行性分析 3 2.1.2 经济可行性分析 3 2.1.3 法律可行性分析 3 2.2 系统功能分析 3 2.2.1 功能性分析 4 2.2.2 非功能性分析…

学习笔记:Qlib 量化投资平台框架 — GETTING STARTED

学习笔记:Qlib 量化投资平台框架 — GETTING STARTED Qlib 是微软亚洲研究院开源的一个面向人工智能的量化投资平台,旨在实现人工智能技术在量化投资中的潜力,赋能研究,并创造价值,从探索想法到实施生产。Qlib 支持多种…

cmake qt 项目编译

当前MAC 编译命令 rm -rf build 删除之前build记录 mkdir build && cd build 重新生成build文件夹 cmake -DCMAKE_PREFIX_PATH"/usr/local/opt/qt" .. Cmake编译指定我的qt路径 cmake --build . 生成程序 程序生成后如此 第三方库单独下载 在CMakeLis…

Swift与iOS内存管理机制深度剖析

前言 内存管理是每一位 iOS 开发者都绕不开的话题。虽然 Swift 的 ARC(自动引用计数)极大简化了开发者的工作,但只有深入理解其底层实现,才能写出高效、健壮的代码,避免各种隐蔽的内存问题。本文将从底层原理出发&…

【机器学习】​碳化硅器件剩余使用寿命稀疏数据深度学习预测

2025 年,哈尔滨工业大学的 Le Gao 等人基于物理信息深度学习(PIDL)方法,研究了在稀疏数据条件下碳化硅(SiC)MOSFET 的剩余使用寿命(RUL)预测问题,尤其关注了其在辐射环境下的可靠性。该研究团队通过一系列实验,采用 ⁶⁰Co γ 射线作为辐射源,以 50rad/s 的剂量率照…

Spring Boot API版本控制实践指南

精心整理了最新的面试资料和简历模板,有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 引言 在API迭代过程中,版本控制是保障系统兼容性的重要机制。合理的版本控制策略可以帮助开发团队平滑过渡接口变更,同时支持多版本客…

AI 语音芯片赋能血压计,4G Cat.1语音模组重构血压监测体验,重新定义 “智能健康管理

一、技术升级背景 全球老龄化进程加速与慢性病管理需求激增的背景下,传统血压计面临三大核心痛点: 操作门槛高:老年群体对复杂按键操作适应性差,误触率达42%(参考WHO数据) 数据孤岛化:87%的居家…

WebServiceg工具

WebServiceg工具 几年前的简单记录一下。 /*** 调用webService 接口返回字符串* param asmxUrl 提供接口的地址 https://app.***.**.cn/Ser.asmx* param waysName 设置要调用哪个方法 上面接口打开后需要调用的方法名字 * param params 请求的参数 参数* return*/…

qt中写一个简易的计算器

以下是添加了详细代码注释的版本&#xff1a; cpp #include <iostream>using namespace std;定义加法函数&#xff08;已注释掉&#xff09; //int add(int a, int b) { // return a b; //}定义减法函数&#xff08;已注释掉&#xff09; //int min(int a, int b) {…

SecureCRT配置端口转发-通过跳板机SSH到其他服务器

在项目开发中遇到这样一个问题&#xff0c;客户服务器有一台操作系统的CentOS JAVA服务器和MySQL服务器&#xff0c;本地电脑通过VPN SSH到这2台服务器进行日常维护。最近因为修改了远程Mysql服务器导致重启时连不上Mysql服务器了。但是JAVA服务器可以SSH到Mysql服务器。通过各…

vue3使其另一台服务器上的x.html,实现x.html调用中的函数,并向其传递数据。

vue3例子 <template><div><iframeload"loadIFreamSite"id"loadIframeSite":src"iframeSrc1"frameborder"0"scrolling"no"allowtransparency"true"style"width: 100%"></iframe&g…

JQ6500语音模块详解(STM32)

目录 一、介绍 二、传感器原理 1.原理图 2.引脚描述 三、程序设计 main文件 usart.h文件 usart.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 JQ6500是一种支持串口驱动的语音模块&#xff0c;提供串口的MP3芯片&#xff0c;集成了MP3、WMV的硬解码。同时软…

如何让自己的博客可以在百度、谷歌、360上搜索到(让自己写的CSDN博客可以有更多的人看到)

发现自己写的博客文章名复制&#xff0c;然后粘贴到百度进行搜索&#xff0c;发现搜索不到自己的&#xff0c;但是会显示其他人的CSDN博客。于是查找相关资料&#xff0c;整理出以下搜索引擎资源收录入口&#xff0c;把自己的文章链接输入进去&#xff0c;然后经过审核通过后&a…

1. 用户之窗

前端开发简介 1. 什么是前端&#xff1f; 前端开发&#xff08;Front-End Development&#xff09;是构建网站或应用 用户直接交互界面 的技术领域&#xff0c;涵盖&#xff1a; 视觉呈现 &#xff08;布局、色彩、动画&#xff09;交互逻辑 &#xff08;点击、滚动、表单&a…

无过拟合的记忆:分析大语言模型的训练动态

Kushal Tirumala⇤ Aram H. Markosyan⇤ Luke Zettlemoyer Armen Aghajanyan Meta AI 研究 {ktirumala,amarkos,lsz,armenag}fb.com 原文链接&#xff1a;[2210.09262] Physics-Driven Convolutional Autoencoder Approach for CFD Data Compressions 摘要 尽管超大语言模型…

黑马Redis(三)黑马点评项目

优惠卷秒杀 一、全局唯一ID 基于Redis实现全局唯一ID的策略&#xff1a; Component RequiredArgsConstructor public class RedisIdWorker {private static final Long BEGIN_TIMESTAMP1713916800L;private static final int COUNT_BITS 32;Resourceprivate final StringRed…

flume----初步安装与配置

目录标题 **flume的简单介绍**⭐flume的**核心组件**⭐**核心特点** **安装部署**1&#xff09;**解压安装包**2&#xff09;**修改名字** **&#xff08;配置文件时&#xff0c;更方便&#xff09;****3&#xff09;⭐⭐配置文件**4&#xff09;**兼容Hadoop**5&#xff09;**…

深度整合Perforce P4+Jira+Confluence:游戏开发团队协作工具链搭建指南

现场对话 游戏开发团队最头疼的版本管理问题是什么&#xff1f; SVN宕机&#xff1f; Git仓库爆炸&#xff1f; 还是美术资源管理一团乱&#xff1f; 在4月11-12日的GGS 2025全球游戏峰会上&#xff0c;Perforce中国授权合作伙伴-龙智的销售和技术支持团队&#xff0c;与行业…