用途:在破坏性 Git 命令执行前加入人工决策,让代理不擅自运行 reset --hard、强推等危险操作,而由人逐条批准。常规操作(提交、推送到特性分支、dry run)可通过。方案与代理无关,分为两层,不假定特定 harness。
主要能力与分层:可移植层是 git pre-push 钩子,对任何代理和人都生效,只覆盖推送。代理层是 scripts/guard-git.py,按各 harness 拦截命令的方式接入,读取命令文本,能识别链式命令(&&、;、|、&)、sudo、xargs、command、bash -c、$(...)、git -C。
防护级别(高级别含低级别):级别1共享历史,保护推送到受保护分支(main、master、远程默认分支及用户追加分支)、强制推送、删除/镜像推送、--no-verify,--force-with-lease 与 --dry-run 放行;级别2本地工作,拦截 reset --hard、clean -f、branch -D、丢弃改动的 checkout/switch、restore 工作树、stash drop/clear、worktree remove --force、reflog expire/delete、gc --prune、prune;级别3严格,所有推送加 rebase、任意 reset、commit --amend、分支或标签删除、filter-branch、filter-repo、update-ref。
使用方式:先一次性询问级别(推荐2)、范围(仅此项目或所有项目)、harness、受保护分支;再安装可移植层(复制 scripts/pre-push 到仓库钩子目录并设为可执行,设置 PROTECTED_BRANCHES 与 LEVEL);然后按各 harness 文档接入代理层,命令为 python3 -I <path>/guard-git.py --level <N> --protected <branches>,默认文本格式以退出码2加 stderr 原因阻止,--format ask-json 输出许可提示;最后验证并逐层报告。
限制:守卫只读命令文本,不跟随 Git 别名、运行 git 的脚本和 eval,能防误操作而非刻意绕过;远程分支保护才是硬性拦截。确认需人工,无人应答时命令会被拒绝。git push --no-verify 会跳过钩子,级别1由命令守卫先行询问。需 Python 3 与 git,无 Python 3 时跳过代理层;部分细节资料未提供。