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

这里写自定义目录标题

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

一、核心实现步骤‌

1.安装必要依赖‌

clike 复制代码
npm install husky@9.1.4 lint-staged@15.2.9 --save-dev

husky:管理 Git 钩子

lint-staged:针对暂存区文件执行检查

2.初始化 Husky‌

clike 复制代码
npx husky-init && pnpm install

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

3.创建校验脚本‌

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

clike 复制代码
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:

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

5.更新 Husky 钩子‌

修改 .husky/pre-commit:

clike 复制代码
npx lint-staged
node scripts/check-version.js

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

clike 复制代码
// 示例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 命令自动更新版本号:
javascript 复制代码
npm version patch -m "升级版本至 %s"

多环境适配‌

  • 若需豁免特定分支(如 main),可在脚本中添加白名单:
javascript 复制代码
const whitelist = ['main', 'master'];
if (whitelist.includes(branch)) return;
  • 该方案通过 Git 提交前强制校验,确保分支与版本号的关联性,适用于需要严格版本控制的敏捷开发场景。
相关推荐
ljh5746491196 小时前
git stash 和 git stash apply
git
SelectDB技术团队8 小时前
Agent 场景动态 JSON 性能拆解:Apache Doris 比 ClickHouse 快 7 倍、比 Elasticsearch 快 2 倍
数据库·clickhouse·elasticsearch·json·apache·日志分析·apache doris
慕容引刀11 小时前
告别Commit信息纠结:使用Git AI Commit插件实现规范化提交
人工智能·git·github·visual studio code·visual studio
敲代码的嘎仔1 天前
实习日志day6--实习日志day6--title命名规范化&businessType纠正&补充缺失的@Log注解&报警与通信模块补充&产出阶段总结文档
java·开发语言·人工智能·git·python·实习·大二
刘马想放假1 天前
Git 从入门到进阶:一篇吃透版本管理的实战指南
git·gitlab
开发者联盟league1 天前
git commit报错No .pre-commit-config.yaml file was found
git
Amy187021118231 天前
UL证书只是起点——智能电表出口北美,真正的考验在量产之后
json
SelectDB1 天前
Agent 场景动态 JSON 性能拆解:Apache Doris 比 ClickHouse 快 7 倍、比 Elasticsearch 快 2 倍
数据库·json·agent
猫老板的豆1 天前
git实战
git
风曦Kisaki1 天前
# Linux实战笔记-HIS项目实战Day01:版本控制与Git基础
linux·笔记·git