跳到主要内容Git-AI:追踪 AI 生成代码的 Git 扩展工具 | 极客日志编程语言AI
Git-AI:追踪 AI 生成代码的 Git 扩展工具
Git-AI 是一款用于追踪 AI 生成代码的 Git 扩展工具。它通过 Git Note 机制记录代码归属,支持多种 AI 编程助手如 Cursor、Copilot 等。核心功能包括代码归属追溯、Prompt 存储与关联、跨工作流保持归属。适用于需要审计 AI 代码比例、管理团队协作及沉淀最佳实践的企业场景。安装简单,零配置即可使用,但需注意 Git Hook 触发问题及多人协同时的 Notes 同步配置。
RefactorPro20 浏览 Git-AI:追踪 AI 生成代码的 Git 扩展工具
在 AI 编程助手百花齐放的今天,Claude Code、Cursor、GitHub Copilot 等工具已成为开发者的标配。随之而来的核心问题是:我们如何知道代码库中哪些代码是 AI 生成的?这不仅仅是技术问题,更关乎代码审计、团队协作和质量追踪。
Git-AI 正是为解决这一痛点而生的工具。它作为一个 Git 扩展,专门用于追踪代码仓库中 AI 生成的代码,核心理念是在多 Agent 时代提供厂商无关的方式来追踪 AI 对代码库的影响。
什么是 Git-AI
Git-AI 是一个基于 Rust 构建的 Git 扩展工具,支持 Mac、Linux 和 Windows 平台。它不改变现有的 Git 工作流,而是通过原生的 Git Note 机制附加归属信息。
为什么需要 Git-AI
在没有 Git-AI 之前,开发者常面临以下困境:
- 无法区分代码来源:难以分辨哪些是人写的,哪些是 AI 生成的。
- 丢失上下文:生成代码时的 Prompt 是什么?用了哪个模型?这些信息通常随提交消失。
- 工作流断裂:rebase、merge、squash 后,AI 归属信息容易丢失。
- 多工具混乱:团队成员使用不同 AI 工具,无法统一追踪。
核心功能解析
AI Blame - 代码归属追溯
类似于 git blame,Git-AI 提供了 git-ai blame 命令,可以清晰展示每一行代码的来源:
git-ai blame src/main.rs
输出示例会显示每一行的归属,例如 [Human] 初始设置,[Claude Code] API 实现等。
Prompt 存储与关联
Git-AI 不仅追踪代码,还保存生成该代码的 prompt。这意味着未来可以回溯'为什么这段代码是这样写的',团队也能复用高质量的 prompt,Code Review 时拥有更多上下文。
跨工作流保持归属
Git-AI 的一大亮点是归属信息能够穿越各种 Git 操作。无论是 merge、rebase、squash 还是 cherry-pick,传统方式下归属信息通常会丢失,而 Git-AI 能保持完整。
支持的 AI 编程工具
Git-AI 采用厂商无关的设计,目前支持主流的 AI 编程工具:
| AI 工具 | 代码归属 | Prompt 保存 |
|---|
| Cursor (>1.7) | ✅ | ✅ |
| Claude Code | ✅ | ✅ |
| GitHub Copilot (VSCode) | ✅ | ✅ |
| Google Gemini CLI | ✅ | ✅ |
| Continue CLI | ✅ | ✅ |
| OpenCode | ✅ | ✅ |
| Atlassian RovoDev | ✅ | ✅ |
技术原理剖析
工作流程
Git-AI 的工作原理分为三个阶段:
- 代码生成阶段:当你使用 AI 工具生成代码时,工具会调用 Git-AI 的 API,标记插入的行为为 AI 生成。
提交阶段:在 git commit 时,Git-AI 收集所有 AI 归属标记,将归属信息保存到 Git Note 中。Git Note 与 commit 绑定,但不影响 commit 本身。查询阶段:通过 git-ai blame 等命令,读取 Git Note 中的归属信息,展示给用户。Git Note 机制
Git-AI 选择使用 Git 原生的 Note 机制存储归属信息。这是一个精妙的设计,优点包括:
- 不污染 commit 历史
- 可以独立同步/备份
- 向后兼容,不影响现有工作流
标准规范
Git-AI 制定了开放标准 Git AI Standard v3.0.0,定义了归属信息的格式,便于第三方工具集成和跨平台数据交换。
快速上手
安装
Mac / Linux / Windows (WSL):
curl -sSL https://usegitai.com/install.sh | bash
powershell -NoProfile -ExecutionPolicy Bypass -Command "irm http://usegitai.com/install.ps1 | iex"
安装完成后会看到类似输出,提示 Hooks 已更新。重要提示:安装完成后,需要重启终端或执行 source ~/.zshrc 使 PATH 生效。
如果看到提示无法自动安装扩展,需要手动安装:在扩展商店搜索 git-ai-vscode 或在 VSCode 市场访问对应插件页面。
使用前提
Git-AI 需要在有提交历史的仓库中才能正常工作。新仓库直接使用可能会报错,建议先初始化并提交一次:
git init
git add .
git commit -m "initial commit"
git-ai stats
零配置使用
安装完成后,无需任何配置,Git-AI 会自动与支持的 AI 工具集成。正常使用你的 AI 编程工具,正常提交,然后查看 AI 归属即可。
常用命令
命令格式说明:git ai 和 git-ai 两种写法都可以执行命令,但推荐统一使用 git-ai(带连字符)。
git-ai blame <file>
git-ai stats
git-ai stats <commit-hash>
git-ai diff <commit-hash>
git-ai show-prompt <prompt-id>
git-ai show <commit-hash>
git-ai status
git-ai install-hooks
git-ai --help
企业级应用场景
代码审计与合规
对于企业来说,Git-AI 可以回答关键问题:代码库中有多少比例是 AI 生成的?哪些模块 AI 参与度最高?AI 代码的质量如何?
团队协作洞察
通过 Stats Bot,可以获得 PR 级别的 AI 代码占比、不同 Agent+Model 组合的代码接受率以及 AI 代码的'半衰期'。
最佳实践沉淀
高质量的 prompt 会被保留,团队可以建立 prompt 知识库,新人快速学习有效的 AI 协作方式,持续优化 AI 使用策略。
与传统 git blame 的对比
| 维度 | git blame | git-ai blame |
|---|
| 追踪对象 | 人 | 人 + AI Agent + 模型 |
| 信息粒度 | 谁在什么时候改的 | 谁/什么 AI 用什么 prompt 生成的 |
| 上下文 | commit message | commit message + prompt |
| 跨操作保持 | 部分丢失 | 完整保持 |
| 统计分析 | 基础 | 丰富的 AI 洞察 |
实战踩坑指南
在实际使用 Git-AI 的过程中,可能会遇到一些问题,这里整理出来供大家参考。
安装后命令不生效
现象:安装完成后执行 git-ai 提示 command not found。
原因:安装脚本修改了配置文件,但当前终端会话没有加载新配置。
解决:重新加载配置 source ~/.zshrc 或重启终端。
Cursor/VSCode 扩展需要手动安装
原因:git-ai 无法自动在 GUI 编辑器中安装扩展。
解决:打开编辑器,按快捷键打开扩展面板,搜索 git-ai 或 git-ai-vscode,点击安装并重启编辑器。
安装扩展后 AI 代码仍然不被追踪
现象:用 Cursor AI 改了代码,提交后 git-ai stats 显示 100% 人工。
原因:扩展安装后没有重启编辑器,或者之前的提交不会被追溯标记。
解决:完全退出编辑器重新打开,用 AI 做一些修改,提交前检查 git-ai status 是否捕捉到 AI 编辑,确认有捕捉到后再提交。
SourceTree 等 GUI 工具提交后丢失 AI 追踪
现象:用 SourceTree 提交后,git-ai stats 显示 0% AI。
原因:Git-AI 依赖 Git Hooks 机制,某些 GUI 工具可能跳过 hooks 或使用不同的 git 环境。
解决:推荐使用命令行或 IDE 内置 Git 面板提交。如果必须用 SourceTree,请确保设置中使用系统 Git 且未禁用 hooks。
git ai --help 不工作
现象:git ai --help 输出 No manual entry。
原因:git ai --help 会被 git 解释为查看 man page。
解决:使用连字符写法 git-ai --help。
Git Hook 原理详解
什么是 Git Hooks?
Git Hooks 是 Git 内置的一套事件触发机制。当你执行某个 Git 操作时,Git 会检查 .git/hooks/ 目录下有没有对应名字的脚本,如果有,就自动执行它。
Git-AI 使用了哪些 Hooks?
- pre-commit:在 commit 前准备和验证 AI 归属数据。
- post-commit:在 commit 后将 AI 归属信息写入 Git Note。
常见问题排查
问题 1:提交后没有 AI 归属信息
检查 hook 是否存在,如果不存在,重新初始化 git-ai。
问题 2:hook 存在但不执行
检查执行权限,添加执行权限 chmod +x .git/hooks/post-commit。
问题 3:使用了 --no-verify 跳过 hooks
这个命令会跳过所有 hooks,导致 AI 归属不会被记录。正确做法是不使用 --no-verify。
Prompt 存储详解
两个存储位置
| 存储位置 | 路径 | 内容 | 用途 |
|---|
| Git Note | 随 commit 存储 | 元数据(工具、模型、行号) | 代码归属追踪 |
| 全局数据库 | ~/.git-ai/internal/db | 完整对话(prompt + 回复) | Prompt 分析 |
Git Commit 与 Git Note 的关系
Git Note 是'贴'在 Commit 上的便签纸——不改变 commit 本身,但可以附加额外信息。Commit 会影响 hash,Note 不会。默认情况下,Commit 会 push,但 Notes 不会自动推送,需单独配置。
查看 Git Note 中的归属信息
git-ai show <commit-hash>
git notes --ref=refs/notes/ai list
git notes --ref=refs/notes/ai show <commit-hash>
git config notes.displayRef refs/notes/ai
然后 git log 就能直接看到 AI 归属信息。
多人协同:Git Notes 的推送与同步
这是最容易混淆的地方。Commit 时 Note 自动附加,但 push 时 Note 不会自动推送。
git config --add remote.origin.push refs/notes/ai
git config --add remote.origin.fetch +refs/notes/ai:refs/notes/ai
配置后的效果:git push 代码和 notes 一起推送,git fetch 代码和 notes 一起拉取。
查看使用了哪些 AI 工具
git-ai stats 只显示整体的 AI 代码比例,如果想知道具体使用了哪些 AI 工具,有以下方法:
git-ai show <commit-hash>
git-ai prompts list
git-ai prompts exec "SELECT DISTINCT json_extract(agent_id, '$.tool') as tool FROM prompts"
| tool 字段 | 对应工具 |
|---|
| claude | Claude Code CLI |
| cursor | Cursor 编辑器 |
| copilot | GitHub Copilot |
| continue | Continue 插件 |
| gemini | Gemini CLI |
查看完整的 Prompt 对话
Git Note 里只有精简的元数据,完整的 prompt 对话存储在全局数据库:
git-ai prompts
git-ai prompts list
git-ai prompts exec "SELECT messages FROM prompts WHERE ..."
项目目录下的 prompts.db
运行 git-ai prompts 会在项目目录生成 prompts.db,这是临时分析文件,建议加入 .gitignore:
echo "prompts.db" >> .gitignore
总结
Git-AI 填补了 AI 编程时代的一个重要空白:追踪和管理 AI 生成的代码。它的核心价值在于透明性、可追溯性、工程化和标准化。对于正在大规模采用 AI 编程工具的团队来说,Git-AI 不是'nice to have',而是即将成为'must have'的基础设施。
相关免费在线工具
- RSA密钥对生成器
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
- Mermaid 预览与可视化编辑
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
- 随机西班牙地址生成器
随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online
- Base64 字符串编码/解码
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
- Base64 文件转换器
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
- Markdown转HTML
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online