Skip to content

AtomCode Git 自动提交系统分析

持续深度分析 — auto_commit 机制、staged 目录、提交签名 2026-06-23


1. 自动提交系统概览

1.1 源文件

crates/atomcode-core/src/agent/git_auto_commit.rs

1.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. 新覆盖的盲区

#之前未覆盖的领域状态发现
1auto_commit 完整工作流6 个阶段的完整流程
2提交条件/跳过条件5 种跳过条件 + 安全检查
3staged 目录(升级暂存)binary 验证 + PendingUpgrade
4提交签名 (trailer)Co-Authored-By 签名
5auto_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

基于 VitePress 构建 · AtomCode v4.25.3 逆向工程分析文档