這里寫自定義目錄標題
- 一、核心實現步驟?
- 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 提交前強制校驗,確保分支與版本號的關聯性,適用于需要嚴格版本控制的敏捷開發場景。