#!/usr/bin/env bash # # 安装 / 卸载 git hooks: # ./scripts/install-hooks.sh # 安装 # ./scripts/install-hooks.sh --uninstall # 卸载 # # 安装后: # - pre-commit:检测到核心业务文件改动就自动跑核心业务测试 # - pre-push :每次 push 前强制跑一次完整核心业务测试 set -e SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" ROOT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" cd "$ROOT_DIR" ACTION="${1:-install}" case "$ACTION" in --uninstall|uninstall|-u) echo "🗑 卸载 hooks..." rm -f ".git/hooks/pre-commit" rm -f ".git/hooks/pre-push" echo " ✅ 已卸载" exit 0 ;; install|"") echo "⚙️ 安装 git hooks..." # 检查仓库根 if [ ! -d ".git" ]; then echo " ❌ 当前目录不是 git 仓库" exit 1 fi # 安装 pre-commit if [ -f ".githooks/pre-commit" ]; then cp ".githooks/pre-commit" ".git/hooks/pre-commit" chmod +x ".git/hooks/pre-commit" echo " ✅ pre-commit 已安装(核心业务改动自动跑测试)" else echo " ❌ 缺少 .githooks/pre-commit" exit 1 fi # 安装 pre-push if [ -f ".githooks/pre-push" ]; then cp ".githooks/pre-push" ".git/hooks/pre-push" chmod +x ".git/hooks/pre-push" echo " ✅ pre-push 已安装(推送前强制跑测试)" else echo " ❌ 缺少 .githooks/pre-push" exit 1 fi echo echo "🎉 hooks 安装完成。" echo echo "今后执行 git commit / git push 时会按 CONTRIBUTING.md 规则自动跑核心业务测试。" echo "紧急绕过:git commit --no-verify / git push --no-verify(请在 PR 描述里说明原因)" echo echo "查看已装的 hooks:" echo " ls -la .git/hooks/pre-*" ;; *) echo "用法: $0 [--uninstall]" exit 1 ;; esac