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

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

这里写自定义目录标题

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

在这里插入图片描述

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

一、核心实现步骤‌

1.安装必要依赖‌

pnpm add husky lint-staged -D

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.xdnf.cn/news/121159.html

相关文章:

  • 【Axure教程】表格嵌套卡片
  • 什么是公链?公链项目有哪些?公链项目开发
  • Axure疑难杂症:母版菜单设置打开链接后菜单选中效果
  • css3新特性第七章(3D变换)
  • ITL和TTL线程间值的传递
  • AI工程pytorch小白TorchServe部署模型服务
  • nginx
  • DNS域名解析服务
  • 滚珠螺杆在数控机床中如何降低摩擦系数?
  • 植物信号转导概述——学习植物的交流方式
  • Spring Boot 中触发异步任务的几种方式
  • Cifar10-图像分类学习笔记(二)--将图像解析存储到TRAIN文件夹下
  • 点云配准算法之NDT算法原理详解
  • ECMAScript 2025新特性深度解析:JavaScript的又一次进化
  • 4.4 记忆机制与上下文管理:短期与长期记忆的设计与应用
  • 目标检测篇---faster R-CNN
  • 车间排产与生产调度:提升制造效率的核心引擎​
  • 涂料油墨制造数字化转型的关键技术与挑战
  • Linux编译器-gcc/g++使用
  • 网络IP冲突的成因与解决方案
  • 【Unity AR开发插件】一、高效热更新:Unity AR 插件结合 HybridCLR 与 ARFoundation 的开源仓库分享
  • JDBC插件式数据库连接器
  • IO 核心要点(1)
  • 基于 EFISH-SBC-RK3588 的无人机智能巡检终端方案‌
  • 5G/6G通信设备中的盲埋孔技术突破
  • 数据结构-查找
  • 第六章 QT基础:5、QT的UDP网络编程
  • 【前端】【业务场景】【面试】在前端开发中,如何实现实时数据更新,比如实时显示服务器推送的消息,并且保证在不同网络环境下的稳定性和性能?
  • 如何轻松将 Python 英文版切换至中文界面
  • 垂直分表和水平分表涉及的不同场景?如何决定使用水平分表还是垂直分表?