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
只读查询,覆盖:
| 子动作 | 等价命令 |
|---|---|
branches | git branch -a |
commits | git log -n 20 |
tags | git tag --sort=-creatordate |
status | git status --porcelain |
diff | git diff / git diff --staged |
show | git show <ref> |
git_mutate
改动型,覆盖:
| 子动作 | 等价命令 | 默认行为 |
|---|---|---|
push | git push <remote> <branch> | 需写明意图 |
pull | git pull --rebase <remote> <branch> | 同上 |
fetch | git fetch <remote> | 通常无副作用,可豁免确认 |
branch_create | git checkout -b <name> | — |
branch_delete | git branch -D <name> | 需写明意图 |
merge | git merge <ref> | 需写明意图 |
tag | git tag <name> | — |
push_tag | git 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-blogAI 调用时按工作区名定位。
安全约束
- 不能跨工作区:在
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 142mstarget_summary 字段记录 push 的目标(远端 + 分支),不记完整 commit 内容。
路线图
- v0.2.0:基础 git_query + git_mutate + Commit 视图
- v0.3.0:支持工作区级别的 Hook(pre-push 检查 / 钉钉通知)
- v0.4.0:跨多个工作区的项目视图(monorepo 友好)
跟进进度:路线图 →
下一步
- 想看 AI 怎么和 Git 协作:内置 AI 对话 →
- 想了解能力体系:能力体系 →
