如果 AI 编写代码,会话记录是否应成为提交的一部分?
Hacker News 摘要原标题:If AI writes code, should the session be part of the commit?
git-memento 是一个 Git 扩展工具,专门用于记录产生代码提交时的 AI 编程会话。它的核心功能是在执行 Git 提交后,将清理后的 Markdown 格式对话记录作为 git notes 附加到新的提交上。
主要目标
• 允许开发者使用标准的 Git 流程(如 -m 或编辑器模式)创建提交。
• 将 AI 会话的追踪记录与提交相关联。
• 保持对 AI 供应商的可扩展支持,目前首选支持 Codex。
• 生成易于人类阅读的 Markdown 格式笔记。
核心命令介绍
• 初始化配置:使用 git memento init 或 git memento init claude 来初始化每个存储库的设置。配置信息存储在本地 git 元数据中。
• 执行提交:通过 git memento commit <session-id> -m "消息" 来提交代码。如果不提供 -m 参数,它会像普通 Git 一样打开默认编辑器。
• 修订提交:git memento amend 用于修正最近的提交。如果不带会话 ID,它会复制前一次的笔记;如果带有新的 ID,则会追加新的会话内容。单个提交的笔记可以包含来自不同 AI 供应商的多个会话。
• 共享与同步:
1. git memento share-notes:将笔记推送到远程仓库,并配置本地环境以便团队成员可以获取这些笔记。
2. git memento push:在一个命令中同时推送分支并同步笔记。
3. git memento notes-sync:安全地从远程获取并合并笔记,具有备份功能。
• 重写处理:git memento notes-rewrite-setup 可以配置 Git 在进行 rebase 或 amend 等重写操作时自动搬运笔记。git memento notes-carry 则手动将指定范围内的笔记属性迁移到新提交上。
• 审计与诊断:使用 git memento audit 检查特定提交范围内是否缺失笔记或元数据是否损坏。git memento doctor 用于诊断供应商配置、引用路径和远程同步状态。
AI 供应商配置
工具通过环境变量或 Git 本地配置来管理供应商。默认支持 Codex 和 Claude Code。开发者可以自定义供应商的二进制文件路径、获取会话的命令参数以及列出会话的参数。如果提交时未找到指定的会话 ID,工具会调用供应商接口列出可用会话供用户选择。
GitHub Action 集成
该项目包含一个可复用的 GitHub Action,支持两种运行模式:
1. comment 模式:这是默认模式,它会读取提交中的 git notes,并将其作为评论发布在 GitHub 的提交记录或拉取请求(Pull Request)中。
2. gate 模式:作为 CI 门控使用。它运行审计命令,如果发现提交缺少必要的 AI 会话笔记,则会导致 CI 任务失败。
通过在工作流文件中引用 mandel-macaque/memento,开发者可以自动化管理代码库中的 AI 会话文档。
安装与构建
• 安装方式:支持通过 curl 脚本直接从 GitHub Release 下载最新版本的二进制文件。
• 本地构建:该项目基于 .NET SDK 10 开发,并使用 NativeAOT 技术编译为独立的可执行文件。支持 macOS (arm64)、Linux (x64) 以及 Windows (x64) 平台。
• 集成方式:将编译后的 git-memento 文件放入系统的 PATH 路径中,Git 就能自动识别并允许用户通过 git memento 调用它。
存储机制
笔记内容通过 git notes add 命令写入。为了支持多会话管理,笔记中使用了特定的 HTML 注释作为分界符,例如 git-memento-session:start 和 git-memento-session:end。在 Markdown 格式的对话记录中,用户的消息会标注为 Git 用户名,而助手消息会标注为对应的 AI 供应商名称。