AI Git Helper:一键生成智能Commit
AI Git Helper:用 AI 自动生成 Commit Message 的桌面工具
一个用 Python + CustomTkinter 开发的桌面应用,集成 OpenAI 兼容 API,支持 GitHub/Gitee/SVN,AI 分析代码变更自动生成 commit message。
写在前面
写代码的时候,git commit -m "fix stuff"这种事大家都干过。但好的 commit message 其实很难写——要简洁、准确、带前缀(feat/fix/refactor),还要符合团队规范。
于是我做了一个工具:AI Git Helper。它的核心思路很简单:把代码变更丢给 AI,让它帮你写 commit message。再加上一些顺手的功能,比如一键创建远程仓库、SVN 支持、命令行双模式。
开源地址:zb_com/ai-git-helper
功能一览
🤖 AI 生成 Commit Message
可视化选择文件 → 一键让 AI 分析 diff → 自动生成 commit message。支持自定义 AI 配置(API Key、Base URL、模型、语言),兼容 OpenAI 格式的任意大模型服务。
🏗️ AI 创建远程仓库
AI 分析项目文件,建议仓库名称 + 自动生成仓库描述,一键创建 GitHub/Gitee 仓库并推送。
📦 多平台支持
- Git:完整的 git 操作(提交、推送、历史查看)
- SVN:subversion 支持
- GitHub:仓库创建/管理/API 集成
- Gitee:码云集成
🖥️ 图形界面
基于 CustomTkinter 的暗色主题桌面应用,无需记任何 git 命令。
技术栈
| 层面 | 技术选型 |
|---|---|
| GUI 框架 | CustomTkinter(暗色主题、现代控件) |
| Git 操作 | GitPython |
| SVN 操作 | subprocess 调用 svn 命令 |
| AI 集成 | OpenAI Python SDK(兼容任意 OpenAI-format API) |
| 配置管理 | PyYAML + 环境变量 |
| 打包 | PyInstaller → 独立 exe |
| 命令行 | Click + Rich |
架构设计
项目结构:
ai-git-helper/ ├── src/ │ ├── app.py # 入口 │ ├── ai_engine.py # AI 引擎(commit message 生成) │ ├── cli.py # CLI 入口(Click) │ ├── config.py # 配置管理 │ ├── gui/ # GUI 模块 │ │ ├── main_window.py # 主窗口 + 侧边栏导航 │ │ ├── commit_page.py # 智能提交页 │ │ ├── history_page.py # 提交历史页 │ │ ├── repo_page.py # 仓库管理页 │ │ ├── settings_page.py# 设置页 │ │ └── theme.py # 主题配色 │ ├── platforms/ # 平台集成 │ │ ├── github.py # GitHub API 客户端 │ │ └── gitee.py # Gitee API 客户端 │ └── vcs/ # 版本控制系统 │ ├── git_handler.py # Git 操作封装 │ └── svn_handler.py # SVN 操作封装 ├── dist/ # PyInstaller 打包产物 ├── build.py # 打包脚本 └── pyproject.toml # 项目配置AI 引擎核心逻辑
defgenerate_commit_message(diff_text:str,file_list:list[str],language:str="zh")->str:"""根据 git diff 内容,用 AI 生成 commit message。"""prompt=f"""你是一个专业的代码审查助手。根据以下代码变更,生成一条简洁明了的 Git commit message。 要求: 1. 第一行为简短摘要(不超过 72 字符) 2. 如有必要,空一行后补充详细说明 3. 使用常见的 commit 前缀:feat/fix/docs/refactor/chore/test 4. 请用中文回复 变更的文件列表:{chr(10).join(file_list)}代码差异 (diff):{diff_text[:8000]}"""response=client.chat.completions.create(model=model,messages=[{"role":"system","content":"你是一个专业的 Git commit message 生成助手。"},{"role":"user","content":prompt},],temperature=0.3,max_tokens=500,)关键点:
- temperature=0.3:降低创造性,保证输出稳定
- diff 截断到 8000 字符:控制 token 成本,同时覆盖大部分变更场景
- 支持 think 标签清理:处理某些模型输出
<think>...</think>包裹的内容
多 AI Profile 支持
# ~/.ai-git-helper/config.yamlai:active:defaultprofiles:default:api_key:"sk-xxx"base_url:"https://api.openai.com/v1"model:"gpt-4o"language:"zh"deepseek:api_key:"sk-xxx"base_url:"https://api.deepseek.com/v1"model:"deepseek-chat"language:"zh"minimax:api_key:"sk-xxx"base_url:"https://api.minimaxi.com/v1"model:"MiniMax-M2.7"language:"zh"任意兼容 OpenAI API 格式的服务都能用——OpenAI、DeepSeek、MiniMax、本地部署的 vLLM/Ollama 都行。
使用方式
方式一:直接运行 exe(推荐)
双击dist/AI-Git-Helper.exe即可启动,无需安装 Python。
方式二:从源码运行
pipinstall-e.python run.py方式三:命令行
# 初始化仓库agh init /path/to/project# AI 智能提交agh commit /path/to/project# 创建远程仓库agh create--platformgitee /path/to/project# 查看仓库状态agh status /path/to/project打包为 exe
pipinstallpyinstaller python build.py生成的AI-Git-Helper.exe在dist/目录下,可以复制到任意 Windows 机器运行,无需安装 Python。
踩坑记录
1. PyInstaller --windowed 模式下 stdout 为 None
打包成 exe 后,sys.stdout可能是None,导致编码错误。修复方式:
ifsys.stdoutisNone:sys.stdout=io.TextIOWrapper(open(os.devnull,"wb"),encoding="utf-8")ifsys.stderrisNone:sys.stderr=io.TextIOWrapper(open(os.devnull,"wb"),encoding="utf-8")2. Windows 控制台中文乱码
os.environ.setdefault("PYTHONIOENCODING","utf-8")3. AI 返回 None 的处理
某些模型在 diff 为空时会返回content: None,需要加防御性检查:
ifraw_contentisNone:logger.error("[AI] API 返回 content 为 None!")return""4. CustomTkinter 暗色主题
CustomTkinter 的暗色主题比 tkinter 原生好看太多,但要注意fg_color和text_color的对比度,避免文字看不清。
后续计划
- 支持更多 VCS(Mercurial)
- Commit message 模板自定义
- 多语言 commit message 切换
- macOS/Linux 原生打包
- 插件系统(自定义 AI prompt 模板)
结语
这个工具的初衷很简单:让写 commit message 这件事不再痛苦。
如果你也经常对着git commit -m "fix"感到愧疚,试试 AI Git Helper。配置好 API Key,选几个文件,点一下按钮——好的 commit message 就出来了。
项目完全开源,欢迎 Star、Fork、提 Issue。
开源地址:https://gitee.com/zb_com/ai-git-helper
许可证:MIT
