Skip to content

Git 工作区

Beta 功能

Git 工作区与配套的 Diff 改 IDEA-Commit 视图仍在开发中。下面描述的能力以 v0.2.0 版本为目标,部分细节可能在正式发布前调整。

它要解决的问题

让 AI 在写完代码后直接帮你推到仓库——但不需要把 Git 凭据贴进对话框。

也让 AI 在动手前先看一眼 git diff——理解你最近改了什么,不要把改动覆盖掉。

心智模型

你的本地仓库目录                  Sigil 工作区注册             凭据金库
─────────────────                ──────────────             ──────
E:\work\acme-backend             name: acme-backend         github-acme
                  ──── 关联 ──→  path: E:\work\acme-...     ──┐
                                 default_cred: github-acme   │

                                                            git push 时
                                                            自动用这条 Token

注册工作区 = 告诉 Sigil "我这个目录是个 Git 仓库 + 它的远端推送默认走哪条凭据"。

注册一个工作区

打开 Sigil → 左侧 Workspaces → "新增工作区"。

填写:

字段内容
名称acme-backend
路径E:\work\acme-backend
默认凭据github-acme(按需选)
启用 Diff 视图✅(建议开)

Sigil 会校验:

  • 路径存在且包含 .git
  • git remote -v 能跑通
  • 凭据类型与远端匹配(GitHub → github_token / Gitee → gitee_token / ...)

保存后,工作区出现在列表里。

AI 通过 MCP 调用工作区

工作区注册后,下面这些能力会自动可用:

git_query

只读查询,覆盖:

子动作等价命令
branchesgit branch -a
commitsgit log -n 20
tagsgit tag --sort=-creatordate
statusgit status --porcelain
diffgit diff / git diff --staged
showgit show <ref>

git_mutate

改动型,覆盖:

子动作等价命令默认行为
pushgit push <remote> <branch>需写明意图
pullgit pull --rebase <remote> <branch>同上
fetchgit fetch <remote>通常无副作用,可豁免确认
branch_creategit checkout -b <name>
branch_deletegit branch -D <name>需写明意图
mergegit merge <ref>需写明意图
taggit tag <name>
push_taggit push <remote> <tag>

调用流程:

Claude:    "把当前 main 推到 origin"

Sigil:     校验:是写类,要客户端层面确认

Claude UI: 弹窗"是否在 acme-backend 执行 git push origin main?"
   ↓ (用户点同意)
Sigil:     注入 github-acme Token → 执行 push → 脱敏输出 → 审计

Claude:    "已推送,新提交 hash: abc1234"

IDEA 风格的 Commit 视图

Sigil 内置了一个轻量的 Commit 视图,用法接近 JetBrains IDEA / WebStorm 里的"Local Changes"面板:

  • 左侧:变更文件树
  • 右侧:unified diff,按文件展示
  • 顶部:暂存 / 取消暂存 / commit / amend 按钮

设计目标是:让你 review AI 生成的改动时不需要切到外部 IDE

不是一个完整 IDE:

  • 不做语法高亮(VSCode / IDEA 已经做得很好)
  • 不做重构
  • 只做 commit-time 的 review + 落地

多工作区切换

可注册任意多个工作区。Sigil 的 MCP 工具列表里每个工作区都是一组独立能力命名空间,避免冲突:

工具列表:
  git_query.acme-backend
  git_mutate.acme-backend
  git_query.personal-blog
  git_mutate.personal-blog

AI 调用时按工作区名定位。

安全约束

  • 不能跨工作区:在 acme-backend 的 push 操作不会触发 personal-blog 的凭据
  • 危险操作仍被拦截git push --force 到 main / master 默认拒绝(可在工作区设置里调整)
  • 未提交改动保护:注册工作区时如发现有未提交改动,会提醒"AI 操作可能影响你的 WIP"
  • 协议白名单:所有 git 调用强制 GIT_ALLOW_PROTOCOL=https:ssh,封死 ext::/fd::/file:// 这类"URL 即命令"的传输协议——否则一条 ext::sh -c <cmd> 远端地址就能在本机执行任意命令(这类地址不以 - 开头,选项校验挡不住,必须靠协议白名单根治)
  • ref 名校验:分支 / tag 名按 git check-ref-format 子集校验,拒绝 - 前缀(防选项注入)、.. / ~ / ^ / : / @{ 等 git 魔法字符
  • 凭据不落 .git/config:push 用临时 token URL 直推(非 remote set-url),明文 token 不写入仓库配置文件
  • 跨 host 不外泄:HTTP 调用禁重定向,避免 token 随 302 跳到其它 host

写类能力(push / pull / branch_delete / push_tag 等)均标 destructiveHint,调用前经桌面端确认。

审计日志 的关系

每次 git 操作都记审计:

2026-05-29T11:00:00Z  claude-code  git_mutate.acme-backend  github-acme  push origin main  success  142ms

target_summary 字段记录 push 的目标(远端 + 分支),不记完整 commit 内容。

路线图

  • v0.2.0:基础 git_query + git_mutate + Commit 视图
  • v0.3.0:支持工作区级别的 Hook(pre-push 检查 / 钉钉通知)
  • v0.4.0:跨多个工作区的项目视图(monorepo 友好)

跟进进度:路线图 →

下一步

让 AI 帮你干活,但永远拿不到你的密钥