如何通过Husky与Shell脚本强制开发者同步修改相似文件?
配置Husky pre-commit钩子强制同步修改关联文件
步骤1:初始化Husky(未配置过的话)
先安装Husky依赖:
npm install husky --save-dev
启用Git hooks:
npx husky install
把Husky启动命令加入package.json,确保后续依赖安装后自动启用:
npm set-script prepare "husky install"
步骤2:创建pre-commit钩子
生成钩子文件并指定执行脚本:
npx husky add .husky/pre-commit "bash .husky/check-sync-files.sh"
步骤3:编写同步检查脚本
在.husky目录下新建check-sync-files.sh,写入以下内容:
#!/bin/bash # 定义需要同步修改的文件对,格式:"文件路径1 文件路径2" SYNC_PAIRS=( "src/utils/fileA.js src/utils/fileB.js" "src/components/CompX.vue src/components/CompY.vue" ) # 获取暂存区的所有修改文件 STAGED_FILES=$(git diff --name-only HEAD --) # 遍历检查每一对文件 for pair in "${SYNC_PAIRS[@]}"; do FILE1=$(echo "$pair" | cut -d' ' -f1) FILE2=$(echo "$pair" | cut -d' ' -f2) # 检查:修改了FILE1但没改FILE2 if echo "$STAGED_FILES" | grep -q "^$FILE1$" && ! echo "$STAGED_FILES" | grep -q "^$FILE2$"; then echo "❌ 错误:修改了 $FILE1,但未同步修改关联文件 $FILE2" exit 1 fi # 检查:修改了FILE2但没改FILE1 if echo "$STAGED_FILES" | grep -q "^$FILE2$" && ! echo "$STAGED_FILES" | grep -q "^$FILE1$"; then echo "❌ 错误:修改了 $FILE2,但未同步修改关联文件 $FILE1" exit 1 fi done # 检查通过,允许提交 echo "✅ 同步文件检查通过" exit 0
步骤4:给脚本添加执行权限
chmod +x .husky/check-sync-files.sh
测试验证
修改其中一个关联文件但不修改另一个,尝试提交:
git add src/utils/fileA.js git commit -m "测试不同步修改"
此时钩子会抛出错误并阻止提交,直到你把对应的关联文件也修改并暂存。
内容的提问来源于stack exchange,提问作者Laxman
相关产品推荐
相关产品推荐

