Git-AI 数据采集原理揭秘:不改工作流,它怎么知道哪行代码是 AI 写的?
Git-AI 数据采集原理揭秘不改工作流它怎么知道哪行代码是 AI 写的一句话总结Git-AI 通过Checkpoint 主动上报 Git Notes 持久存储在不改变你任何 Git 操作习惯的前提下精确追踪每一行 AI 代码的身世。一、为什么需要专门追踪 AI 代码2026 年AI 辅助编程已经成为日常。但一个灵魂拷问始终存在当你git-ai blame某行代码时你能分辨出它是人写的还是 Claude 写的吗传统的代码审查工具只能告诉你谁提交的但无法回答谁生成的。而 Git-AI 解决的就是这个问题——它让 AI 代码的追踪精确到每一行、每一次会话、每一个 Prompt。更关键的是它做到了零工作流侵入你照常git add、git commit、git pushGit-AI 在后台默默完成所有采集。二、核心原理四步完成数据采集Git-AI 的采集链路可以概括为四个阶段┌─────────────┐ ┌──────────────┐ ┌─────────────┐ ┌─────────────┐ │ Checkpoint │ → │ Authorship │ → │ Git Notes │ → │ AI Blame │ │ 实时标记 │ │ Log 归属汇总 │ │ 持久存储 │ │ 交互展示 │ └─────────────┘ └──────────────┘ └─────────────┘ └─────────────┘下面逐层拆解。三、第一步Checkpoint — AI 主动自报家门3.1 关键设计不猜测只记录Git-AI 最核心的设计哲学是“主动上报”而非被动探测。当 AI 编程助手Cursor、Claude Code、Copilot 等执行Write、Edit、MultiEdit操作时会触发 Git-AI 的 hooks调用如下命令git-ai checkpoint claude --hook-input stdin这个命令告诉 Git-AI哪个 Agent在操作claude / cursor / copilot哪个模型在生成代码哪些文件、哪些行被修改了对应的 Prompt 内容是什么对比传统的AI 代码检测工具后者靠语法特征、命名风格等猜某段代码是不是 AI 写的准确率有限。Git-AI 则是 AI 自己说我写了这几行精准度天壤之别。3.2 Checkpoint 存储在哪里Checkpoint 数据首先记录在本地工作区的临时状态中等待git commit时统一汇总。它不会在你编辑代码的过程中污染 Git 历史也不会影响性能。四、第二步Authorship Log — 提交时生成身份证当你执行git commit时Git-AI 自动执行以下动作收集所有 Checkpoint把本次工作会话中所有的 AI 编辑记录汇总生成 Authorship Log一份结构化的归属记录格式类似src/main.rs prompt_id_abc 12-45, 78, 92-110 prompt_id_def 200-215 src/utils.rs prompt_id_abc 5-30 --- Agent: claude Model: claude-sonnet-4.5-20250929 Session: session_id_xyz关联到 Commit SHA这份 Log 与当前的 Commit SHA 绑定五、第三步Git Notes — 最巧妙的存储设计5.1 为什么不直接改 commit message如果 Git-AI 把 AI 归属信息写入 commit message会存在三个致命问题污染 Git 历史每次提交都多一大段元数据可读性极差无法修改commit message 一旦提交就不可变后续修正困难rebase/merge 时丢失Git 历史重写后归属信息无法自动迁移5.2 Git Notes 是什么Git Notes 是 Git 原生的元数据附加机制。它允许你给任意 Commit 附加额外的信息而不修改 Commit 本身。Git-AI 将 Authorship Log 存储在特殊的引用下refs/notes/ai/commit_sha5.3 Git Notes 的优势特性说明不污染主历史主分支的 commit log 保持干净可独立同步git push origin refs/notes/ai单独推送/拉取抗历史重写rebase、merge、cherry-pick 时自动迁移归属数据可移植克隆仓库时可以通过git fetch一并获取5.4 如何同步到远程Git-AI 安装时会自动配置推送规则确保每次git push代码时notes 也一起推上去# 检查是否已配置gitconfig --get-all remote.origin.push# 预期输出包含refs/notes/ai:refs/notes/ai# 如果没有手动添加gitconfig--addremote.origin.push refs/notes/ai:refs/notes/ai推送后校验两端是否一致gitls-remote origin refs/notes/aigitshow-ref refs/notes/ai# 两个哈希值一致即为成功六、第四步AI Blame — 让每行代码开口说话有了前三步的铺垫展示层就变得水到渠成。6.1 命令行溯源git-ai blame src/main.rs输出示例cb832b7 (Aidan Cunniffe 2025-12-13) pub fn execute_diff( cb832b7 (Aidan Cunniffe 2025-12-13) repo: Repository, fe2c4c8 (claude [session] 2025-12-02) // Resolve commits to get SHAs fe2c4c8 (claude [session] 2025-12-02) let (from, to) match spec {一眼就能看出前两行是人类写的后两行是 Claude 在 sessionfe2c4c8中生成的。6.2 查看详细 Promptgit-ai showcommit-sha可以查看该次提交完整的 AI 作者元数据包括生成该代码的原始 Prompt。6.3 IDE 可视化安装 VS Code 插件后AI 代码会用不同颜色高亮鼠标悬停即可看到哪个 Agent 写的用了什么模型原始 Prompt 摘要七、常用命令速查表7.1 核心追踪命令命令作用git-ai blame 文件增强版 blame每行标注人类/AI/模型/会话git-ai diff HEADdiff 每行附带 AI/人工归属标记git-ai status查看工作区未提交变更的 AI 占比git-ai show sha查看单次提交的完整 AI 元数据git-ai stats统计 AI 代码行数占比git-ai stats --json输出 JSON 格式的详细统计7.2 配置与同步命令命令作用git config --get-all remote.origin.push检查 notes 自动推送是否配置git config --add remote.origin.push refs/notes/ai:refs/notes/ai添加 notes 自动推送git fetch origin refs/notes/ai:refs/notes/ai从远程拉取 AI 归属数据git push origin refs/notes/ai手动推送 AI 归属数据git ls-remote origin refs/notes/ai查看远程 notes 哈希7.3 维护命令命令作用git-ai upgrade一键升级到最新版git-ai install-hooks给 VSCode/Cursor/Claude/Copilot 安装埋点钩子git-ai uninstall-hooks卸载钩子八、团队协作中的关键注意事项8.1 每个人的 Git-AI 数据必须同步Git Notes 默认不会随git push自动上传除非配置了remote.origin.push。团队协作时务必确认# 每个人都要有这个配置gitconfig --get-all remote.origin.push8.2 rebase / merge 后的归属迁移Git-AI 内置了归属迁移逻辑在rebase、merge --squash、cherry-pick等操作后会自动重写 notes。但如果遇到复杂冲突或手动git notes操作可能导致归属数据异常详见上一篇踩坑记录。8.3 不要手动操作 Git Notes除非你知道自己在做什么否则不要直接执行git notes copy/add/edit。这些操作会产生无代码变更的内部提交可能导致采集系统的统计虚高。九、总结Git-AI 的设计精髓设计原则具体体现主动上报AI Agent 通过 Checkpoint 显式标记自己写了哪些行非侵入式完全兼容现有 Git 工作流无需学习新命令持久存储基于 Git Notes随仓库迁移抗历史重写精准溯源精确到行级别关联到 Agent、模型、Session、PromptGit-AI 把AI 代码追踪这个问题从事后猜测变成了事中记录这是它在技术上最本质的突破。理解了 Checkpoint → Authorship Log → Git Notes → AI Blame 这条链路你就掌握了 Git-AI 的核心工作原理。本文基于 Git-AI 开源项目的技术文档整理旨在帮助开发者深入理解其数据采集机制。
