设置 Git 护栏
设置 PreToolUse 钩子,在 Claude 执行前拦截并阻止危险的 git 命令。
会被拦截的命令
git push(所有变体,包括--force)git reset --hardgit clean -f/git clean -fdgit branch -Dgit checkout ./git restore .
被拦截时,Claude 会看到一条消息,告知它没有权限执行这些命令。
步骤
1. 询问作用范围
询问用户:仅安装到当前项目(.claude/settings.json),还是所有项目(~/.claude/settings.json)?
2. 复制钩子脚本
捆绑脚本位于:scripts/block-dangerous-git.sh
根据作用范围复制到目标位置:
- 项目:
.claude/hooks/block-dangerous-git.sh - 全局:
~/.claude/hooks/block-dangerous-git.sh
用 chmod +x 赋予可执行权限。
3. 将钩子添加到 settings
添加到对应的 settings 文件:
项目(.claude/settings.json):
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/block-dangerous-git.sh"
}
]
}
]
}
}
全局(~/.claude/settings.json):
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "~/.claude/hooks/block-dangerous-git.sh"
}
]
}
]
}
}
如果 settings 文件已存在,将钩子合并进现有的 hooks.PreToolUse 数组——不要覆盖其他设置。
4. 询问是否自定义
询问用户是否要在拦截列表中增加或移除某些模式。按需编辑已复制的脚本。
5. 验证
运行快速测试:
echo '{"tool_input":{"command":"git push origin main"}}' | <path-to-script>
应以退出码 2 结束,并在 stderr 打印 BLOCKED 消息。