当前位置: 首页 > news >正文

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

http://www.jsqmd.com/news/1101654/

相关文章:

  • Java后端转AI应用开发:收藏这份90天学习路线,拒绝被算法论文吓住!
  • Temu 海量 SKU 合规攻略,用凌风工具箱批量上传合规信息降低失误
  • SQL Server 2022 Docker 容器化部署配置规范与注意事项
  • 佛山家具企业亲测:如何通过创新提升销量?
  • 微信小程序接口签名逆向实战:从抓包到算法复现
  • 3步实现Windows电脑直接运行安卓应用:免费高效的跨平台解决方案
  • 警惕“AI幻觉陷阱”:5类高危场景中AI生成代码的静态扫描漏洞率高达43%,附自动化检测SOP清单
  • 从写注释到写架构:AI工具如何重构开发生命周期?——基于137个企业项目的真实演进路径(含ROI测算模型)
  • AI代码审查工具避坑指南(血泪教训版):3个导致线上事故的误报案例,以及精准率超94.2%的调优配置
  • 毕设分享 yolov8叶片病害检测系统(源码+论文)
  • 2026 深度解读:存量竞争下新媒体代运营的核心竞争力
  • 计算机毕业设计之基于逻辑回归的天猫用户忠诚度分析与预测正文
  • Claude Code + Cursor + 星云 Skill:给 Agent 一副可交互的身体
  • Go Web服务Docker+Nginx生产部署实战指南
  • 别再只用SE了!用PyTorch手把手实现ECA注意力机制,代码不到20行
  • 算力服务器整机定制交付快哪个靠谱
  • 自动驾驶决策控制新范式:MPC与深度强化学习的融合架构与实践
  • LLM开发者新基线:RAG+LoRA+评估链路+部署契约四支柱
  • Vue3+Vite 08:父子组件通信
  • 3步搞定安卓应用安装:Windows平台APK安装器完全指南
  • SRWE:如何用Windows运行时窗口编辑器彻底改变你的多分辨率工作流?
  • 2026年必学!收藏这份AI大模型应用指南,小白也能轻松掌握数字助理的奥秘
  • AI 电动吸奶器智能功率 MOSFET 完整选型方案
  • 告别轮询!用C#和Fleck库5分钟搞定一个WebSocket聊天服务端
  • 计算机毕业设计之基于离线数仓的化妆品推荐系统
  • 3步搞定电子课本下载:tchMaterial-parser让教育资源获取效率提升10倍
  • 如何免费获取百度网盘高速下载链接?Python直链解析工具完整指南
  • Bamtone HCT耐电流测试方案:AI时代,如何确保PCB线路不“掉链子“?
  • 2026年GEO优化工具权威评测
  • wvp-GB28181-pro深度解析:国标视频监控平台架构设计与实现方案