git-guardrails-claude-code

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Setup Git Guardrails

配置 Git 防护机制

设置一个 PreToolUse hook,在 Claude 执行危险 git commands 前拦截并阻止它们。
设置一个 PreToolUse 钩子,在 Claude 执行危险的 git 命令前拦截并阻止它们。

What Gets Blocked

会被阻止的命令

  • git push
    (包括
    --force
    在内的所有 variants)
  • git reset --hard
  • git clean -f
    /
    git clean -fd
  • git branch -D
  • git checkout .
    /
    git restore .
被阻止时,Claude 会看到一条 message,说明它无权访问这些 commands。
  • git push
    (包括
    --force
    在内的所有变体)
  • git reset --hard
  • git clean -f
    /
    git clean -fd
  • git branch -D
  • git checkout .
    /
    git restore .
当命令被阻止时,Claude 会收到一条提示信息,说明它无权执行这些命令。

Steps

步骤

1. Ask scope

1. 询问作用范围

询问用户:只为当前 project 安装(
.claude/settings.json
),还是为所有 projects 安装(
~/.claude/settings.json
)?
询问用户:只为当前 project 安装(
.claude/settings.json
),还是为所有 projects 安装(
~/.claude/settings.json
)?

2. Copy the hook script

2. 复制钩子脚本

bundled script 位于:scripts/block-dangerous-git.sh
根据 scope 复制到目标位置:
  • Project:
    .claude/hooks/block-dangerous-git.sh
  • Global:
    ~/.claude/hooks/block-dangerous-git.sh
chmod +x
让它可执行。
捆绑脚本位于:scripts/block-dangerous-git.sh
根据作用范围复制到对应位置:
  • Project:
    .claude/hooks/block-dangerous-git.sh
  • Global:
    ~/.claude/hooks/block-dangerous-git.sh
chmod +x
让它可执行。

3. Add hook to settings

3. 将钩子添加到配置文件

添加到对应 settings file:
Project (
.claude/settings.json
):
json
{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/block-dangerous-git.sh"
          }
        ]
      }
    ]
  }
}
Global (
~/.claude/settings.json
):
json
{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/block-dangerous-git.sh"
          }
        ]
      }
    ]
  }
}
如果 settings file 已存在,把 hook merge 到现有
hooks.PreToolUse
array 中,不要覆盖其他 settings。
添加到对应的配置文件中:
Project (
.claude/settings.json
):
json
{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/block-dangerous-git.sh"
          }
        ]
      }
    ]
  }
}
Global (
~/.claude/settings.json
):
json
{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/block-dangerous-git.sh"
          }
        ]
      }
    ]
  }
}
如果配置文件已存在,请将钩子合并到现有的
hooks.PreToolUse
数组中,不要覆盖其他配置。

4. Ask about customization

4. 询问自定义需求

询问用户是否要在 blocked list 中添加或移除 patterns。相应编辑复制后的 script。
询问用户是否需要在阻止列表中添加或移除命令模式,并相应编辑已复制的脚本。

5. Verify

5. 验证配置

运行快速测试:
bash
echo '{"tool_input":{"command":"git push origin main"}}' | <path-to-script>
应以 code 2 退出,并向 stderr 打印 BLOCKED message。
运行快速测试:
bash
echo '{"tool_input":{"command":"git push origin main"}}' | <path-to-script>
脚本应返回状态码 2,并向标准错误输出打印 BLOCKED 信息。