AtomCode Git 自动提交系统分析
持续深度分析 — auto_commit 机制、staged 目录、提交签名 2026-06-23
1. 自动提交系统概览
1.1 源文件
crates/atomcode-core/src/agent/git_auto_commit.rs1.2 配置项
toml
[auto_commit]
# enabled = false # 默认禁用二进制中的配置标记:
auto_commit (在 Config 结构体默认值中出现)2. 工作流程
Agent 执行文件编辑
│
▼
回合结束 (turn_end)
│
▼
检查 auto_commit 配置
│
├── 禁用 → 跳过
│
└── 启用
│
▼
检查是否在 git 仓库中
│
├── 否 → "not a git repository"
│
└── 是
│
▼
检查是否有编辑的文件
│
├── 无 → "[auto-commit skipped] no edited files"
│
└── 有
│
▼
git add . (自动暂存)
│
▼
git commit -m "<auto generated message>"
│
├── 成功 → "[auto-commit] <hash> <msg>"
│
└── 失败 → "[auto-commit skipped] <reason>"3. 提交条件
| 条件 | 触发 | 消息 |
|---|---|---|
| 不在 git 仓库 | 跳过 | not a git repository |
git rev-parse 返回空 | 跳过 | git rev-parse returned an empty sha |
| git add 后无变更 | 跳过 | no staged changes after git add |
| 索引已有暂存内容 | 跳过 | index has pre-existing staged changes |
| 无编辑的文件 | 跳过 | [auto-commit skipped] no edited files |
3.1 安全条件
index has pre-existing staged changes — 如果用户已经有手动暂存的更改,自动提交会跳过。防止自动提交意外地混入用户的有意修改。
4. 提交消息格式
[auto-commit] <description of changes>自动提交的消息基于编辑操作生成(如 Edited file.rs, Wrote new_file.py, Created new project/)。
5. Staged 目录(升级暂存)
Staged 目录用于二进制升级暂存,与自动提交是两个不同的功能:
staged/ (在 ~/.atomcode/ 或安装目录下)
└── <new_binary> # 下载的新版本二进制
└── pending.json # 待处理的升级信息
└── history.json # 升级历史
staged 二进制验证:
- 大小验证: "staged binary size changed between sessions"
- 哈希验证: "staged binary sha256 drifted between sessions"
- 升级前检查 staged 二进制一致性5.1 PendingUpgrade 结构体
rust
struct PendingUpgrade { // 6 个字段
staged_path: String, // staged 文件路径
sha256: String, // SHA256 哈希
released_at: String, // 发布时间
version: String, // 版本号
// ...
}6. 提交签名(Trailer)
When you create a git commit on the user's behalf, end the
commit message with this trailer (preceded by a blank line):AtomCode 的自动提交末尾会添加 Co-Authored-By: Claude <noreply@anthropic.com> 签名,遵循 Claude Code 的提交协作规范。
7. 存储配置
toml
[auto_commit]
# enabled = true/false数据存放在 ~/.atomcode/ 根配置 config.toml 中。
8. 相关流程
auto_commit 关闭 → 无 git 操作
│
▼
回合完成 ───▶ 检查文件变更
│
▼
auto_commit 开启 + in git
│
▼
git add . → git commit
│
▼
Terminal 输出 "auto-commit" 信息9. 新覆盖的盲区
| # | 之前未覆盖的领域 | 状态 | 发现 |
|---|---|---|---|
| 1 | auto_commit 完整工作流 | ✅ | 6 个阶段的完整流程 |
| 2 | 提交条件/跳过条件 | ✅ | 5 种跳过条件 + 安全检查 |
| 3 | staged 目录(升级暂存) | ✅ | binary 验证 + PendingUpgrade |
| 4 | 提交签名 (trailer) | ✅ | Co-Authored-By 签名 |
| 5 | auto_commit vs staged 区别 | ✅ | 两个不同功能 |
本报告由持续分析循环生成
逆向命令索引
bash
# 提取 auto_commit 相关
strings atomcode.bin.bak | grep -iE "auto_commit|spawn git|git.*commit|staged" | sort -u
# 输出: auto_commit spawn git rev-parse spawn git pull --ff-only