Git 工作区
它要解决的问题
让 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 调用工作区
工作区注册后,下面这些能力可用。工作区是参数,不是能力名的一部分 —— 调用时传 workspace 指定对哪个仓库操作。
只读
| 能力 | 等价命令 |
|---|---|
workspace_list | 列出已注册的工作区 |
workspace_status | git status --porcelain |
workspace_log | git log |
workspace_diff | git diff / git diff --staged |
workspace_branches | git branch -a |
workspace_remotes | git remote -v |
workspace_read_file | 读取仓库内某个文件 |
workspace_scan_roots | 扫描本机常见代码目录,找出可注册的仓库 |
改动型
| 能力 | 等价命令 | 确认级别 |
|---|---|---|
workspace_stage | git add | 通知 |
workspace_commit | git commit | 通知 |
workspace_push | git push | 通知;强推走阻塞确认 |
workspace_push_tag | git push <tag> | 通知;强推同上 |
workspace_pull | git pull --rebase | 通知 |
workspace_fetch | git fetch | 通知 |
workspace_branch_create | git checkout -b | 通知 |
workspace_branch_delete | git branch -d/-D | 阻塞确认 |
workspace_register / workspace_unregister | 登记 / 注销工作区 | 通知 |
强制推送只要一个开关
把 force 设为 true 即可。Sigil 内部自动读远端当前状态作安全基准 —— 既能覆盖重写过的历史,又能在远端被别人改动时拒绝覆盖。不开放裸的强制推送。
tag 推送同理。tag 是发版锚点而且没有 reflog,被盖掉就追不回来了。
和 git_push / git_clone 的区别
两套都能推送,区别只在怎么指定仓库:
| 传什么 | 适合 | |
|---|---|---|
workspace_push | 已登记的工作区名 | 常用仓库,凭据已绑好 |
git_push | 仓库的绝对路径 | 临时仓库、没登记过的目录 |
凭据注入、Token 不落盘、强推安全基准这些行为两者完全一致。
IDEA 风格的 Commit 视图
Sigil 内置了一个轻量的 Commit 视图,用法接近 JetBrains IDEA / WebStorm 里的"Local Changes"面板:
- 左侧:变更文件树
- 右侧:unified diff,按文件展示
- 顶部:暂存 / 取消暂存 / commit / amend 按钮
设计目标是:让你 review AI 生成的改动时不需要切到外部 IDE。
它不是一个完整 IDE:
- 不做语法高亮(VSCode / IDEA 已经做得很好)
- 不做重构
- 只做 commit-time 的 review + 落地
多工作区切换
可注册任意多个工作区。工具列表不会因此变长 —— 工作区是能力的参数,不是名字的一部分:
工具列表里始终只有这一套:
workspace_list / workspace_status / workspace_commit / workspace_push / ...
调用时指定对哪个仓库操作:
workspace_status(workspace: "acme-backend")
workspace_push(workspace: "personal-blog", remote: "origin")先调 workspace_list 看有哪些工作区可用。
安全约束
- 不能跨工作区:在
acme-backend的 push 操作不会触发personal-blog的凭据 - 强制推送要人工放行:普通推送只弹右下角通知,强推走阻塞式确认;且内部一律带安全基准 —— 远端被别人改动过就拒绝覆盖,而不是盖掉
- 未提交改动保护:注册工作区时如发现有未提交改动,会提醒"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
删分支、强制推送这类不可逆动作标 destructiveHint 并走阻塞式确认;提交、普通推送等可回滚的动作走右下角通知,不打断你。
与 审计日志 的关系
每次 git 操作都记审计:
2026-05-29T11:00:00Z claude-code workspace_push github-acme push origin main success 142mstarget_summary 字段记录 push 的目标(远端 + 分支),不记完整 commit 内容。
路线图
- v0.2.0:基础只读 / 改动能力 + Commit 视图
- v0.3.0:支持工作区级别的 Hook(pre-push 检查 / 提交规范校验)
- v0.4.0:跨多个工作区的项目视图(monorepo 友好)
跟进进度:路线图 →
下一步
- 想看 AI 怎么和 Git 协作:内置 AI 对话 →
- 想了解能力体系:能力体系 →
