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 提交前强制校验,确保分支与版本号的关联性,适用于需要严格版本控制的敏捷开发场景。