1、立项背景和目标
在日常使用 Git / TortoiseGit 提交代码时,编写符合规范的提交信息(如 Conventional Commits)既耗时又容易遗漏,提交历史质量参差不齐,影响协作与代码审查。大模型已经具备理解代码差异的能力,但缺少一个把「git 变更采集 + 规范约束 + 模型生成 + 便捷交付」串起来的上手即用的工具。本项目目标是:选中任意 Git 项目目录,即可自动扫描全部未提交变更,一键生成规范、可编辑、可复制的提交信息,同时保持零依赖、免安装、配置集中,让普通开发者也能轻松部署使用。
2、软件功能、核心功能模块的介绍
变更采集模块(git_collector.py):对选中项目执行 git status --porcelain、git diff HEAD、git log,得到变更文件清单、未跟踪新文件、差异内容与近期提交历史。
提示词组装模块(prompt_builder.py):按配置的提交风格(Conventional / simple)与语言(auto / zh / en)动态拼装 system / user 提示词;长 diff 自动截断并显式标注,控制 token 开销。
模型生成模块(llm_client.py):通过 OpenAI 兼容接口调用大模型生成提交信息,并对返回结果做清理(去除多余前后缀 / markdown 代码块);对 401、429、超时等常见错误给出中文友好提示。
图形界面模块(gui.py):tkinter 界面,左侧变更文件列表、右侧可直接编辑的提交信息;支持「重新生成」「复制到剪贴板」「打开 .env」「选择项目」;后台线程生成、queue 轮询回填,界面不卡顿。
配置与打包(config.py + build.bat):全部配置收敛在 exe 同目录 .env,PyInstaller 一键打包成免安装单文件 exe。
3、业务流程、功能路径描述
启动程序 → 检测默认项目目录是否为 Git 仓库;
点击「选择项目」→ 指定任意 Git 项目根目录(非仓库会给出提示);
自动执行 git status / diff / log 采集变更,并在左侧展示变更文件清单;
配置中心:点击「打开 .env」填写 API_KEY / MODEL / BASE_URL / 提交风格 / 语言等;
点击「重新生成」→ 组装提示词 → 后台线程调用大模型 → 结果回填到右侧可编辑文本框;
人工确认或修改后点击「复制到剪贴板」→ 粘贴到 TortoiseGit 或命令行使用(工具本身不执行提交,由用户人工确认,保证安全)。
1、整体架构和设计思路,不同模块使用的技术栈
整体采用「采集 → 组装 → 生成 → 交付」的单向流水线架构:git_collector.py 通过 subprocess 静默执行 git status / diff / log(CREATE_NO_WINDOW 防弹窗),拿到变更清单、差异与历史;prompt_builder.py 按提交风格与语言拼装提示词,长 diff 自动截断控制 token;llm_client.py 经 langchain-openai 调用 OpenAI 兼容接口(兼容 DeepSeek / 通义千问 / Ollama 等)并清洗输出、友好报错;gui.py 用 tkinter + pyperclip 实现后台线程生成、queue 轮询回填、编辑与复制。设计要点:三路上下文而非裸读 diff,让模型先理解改动目的;工具不自动提交,人工确认兜底;配置收敛 .env,PyInstaller 打包免安装 exe。
2、我的负责模块和结果
我独立完成 6 个模块(main / config / 采集 / 提示词 / 模型 / GUI),源码约 650 行。采集覆盖 status、diff、log 三类信息,处理未跟踪文件与 diff 截断;报错覆盖 10+ 类场景(401/429/超时等)的中文提示;GUI 支持选项目、开 .env、重新生成、复制、编辑 5 项交互且不卡界面;打包产出单文件 exe 并配 build.bat 一键重建。
3、我遇到的难点、坑,和解决方案
Windows 下 git 弹黑窗、GBK 乱码:用 CREATE_NO_WINDOW 静默运行、utf-8 容错解码解决;大仓库 diff 超限:加 MAX_DIFF_LINES 截断并标注,保证一次生成;模型输出含 markdown 前后缀:clean_message() 清洗后可直接粘贴;GUI 卡死:后台线程 + queue 轮询 + 防重入,界面流畅;exe 路径问题:用 sys.frozen 定位 exe 目录读 .env,GUI 下可先开界面再选仓库。