| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- #!/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
|