AI Git Helper:一键生成智能Commit

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.exedist/目录下,可以复制到任意 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_colortext_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