
写在前面
每个软件项目都离不开版本更新,而每次更新都离不开一份清晰的 Changelog。但你是否也经历过这样的场景:
- 版本发布前匆忙整理提交记录,手忙脚乱
- Changelog 格式混乱,用户看不懂到底更新了什么
- 团队周报、日报需要从 Git 记录中手动整理,费时费力
- 想要写一份专业的提交信息,却不知道如何描述

这些问题曾经让我深陷其中,直到我决定用 AI 的力量来彻底解决这个痛点。今天,我想和你分享我是如何从这些实际问题出发,开发出了一款智能 Changelog
生成器的。
痛点的发现:那些令人崩溃的瞬间
版本发布日的恐慌
记得那是一个普通的周五下午,产品经理突然告诉我:”今天下午 3 点要发版本,快准备一下 Changelog。”
我打开 Git Log,看着近 200 条提交记录,瞬间头大:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| commit a1b2c3d4 Author: dong4j Date: Fri Oct 27 14:23:15 2024 +0800
fix bug
commit e5f6g7h8 Author: zhangsan Date: Fri Oct 27 11:45:32 2024 +0800
update
commit i9j0k1l2 Author: lisi Date: Thu Oct 26 16:12:08 2024 +0800
修复了问题
|
这些提交记录五花八门:有的英文,有的中文,有的过于简单,有的又太详细。更糟糕的是,很多提交记录并不能准确反映实际的改动内容。

工作汇报的折磨
作为一个团队的负责人,每周都需要准备工作汇报。我需要从大量的 Git 提交中提炼出有价值的信息:
- 本周完成了哪些功能?
- 修复了哪些重要的 Bug?
- 有哪些技术改进?
- 下周的计划是什么?
这个过程通常需要花费我 1-2 小时的时间:
- 打开 Git Log
- 筛选相关的提交记录
- 分析每个提交的实际内容
- 手动分类整理
- 撰写汇报文档
更痛苦的是,很多时候提交记录写得不清楚,我还需要去查看代码的 diff 来了解实际做了什么。
提交信息书写的困境
不仅是整理历史记录很痛苦,就连写提交信息本身也是一个挑战。我相信很多开发者都有这样的经历:
1 2 3 4 5 6 7
| # 写提交信息时的心理活动 这个功能改了好多地方,到底该怎么描述呢? "fix user login" 太简单了 "修复用户登录功能,解决了由于 token 过期导致的登录失败问题" 好像又太啰嗦 到底应该用什么格式?要不要加 issue 号? type 是 feat 还是 fix? scope 应该写什么?
|

现有解决方案的不足
面对这些问题,我开始寻找现有的解决方案,但结果令人失望。
传统 Changelog 工具的局限
市面上有一些传统的 Changelog 生成工具,比如:
- ** conventional-changelog**:依赖于约定式提交规范
- git-changelog:基于 Git 标签和提交记录生成
- release-drafter:GitHub Actions 自动生成发布说明
但它们都有共同的问题:
- 依赖提交规范:要求团队严格遵守约定式提交规范,但在实际项目中很难执行
- 缺乏智能理解:只是简单地提取和格式化提交记录,无法理解实际的业务价值
- 格式死板:生成的 Changelog 千篇一律,缺乏个性化
- 语言支持有限:大多数工具对中文支持不够友好
AI 工具的尝试
我也尝试过一些通用的 AI 工具:
- 手动复制粘贴提交记录到 ChatGPT,让它帮我整理
- 使用一些在线的 Changelog 生成服务
但这些方法都有明显的问题:
- 流程割裂:需要在 IDE 和外部工具之间切换,打断了开发流程
- 上下文缺失:AI 无法理解代码的具体改动,只能基于提交记录生成
- 配置复杂:每次都需要重新输入提示词,无法保持一致性
- 隐私担忧:将代码信息发送给第三方服务存在安全风险
灵感的诞生:AI + Git 的完美结合
一次偶然的实验
就在我对这些解决方案感到绝望的时候,我正在进行一个实验性的项目。我需要为这个项目生成一份详细的 Changelog,于是我尝试了一个新的思路:
- 使用 JGit API 读取 Git 提交记录
- 结合代码的 diff 信息分析实际改动
- 将这些结构化的数据发送给 AI
- 让 AI 基于完整的上下文生成专业的 Changelog
实验的结果让我震惊!生成的 Changelog 不仅格式规范,内容准确,还能够:
- 智能分类:自动将改动分为新功能、Bug 修复、性能优化等类别
- 业务价值描述:不仅描述技术改动,还能说明对用户的实际价值
- 多语言支持:完美支持中文,表达自然流畅
- 格式灵活:可以根据需要生成不同格式的 Changelog

从实验到产品的进化
这个实验让我意识到:AI + Git 的结合,完全有可能彻底改变我们管理变更日志的方式。
但我面临一个新的问题:如何将这个实验性的功能变成一个易用的产品?
我调研了市面上的 IDE,发现 IntelliJ IDEA 是最理想的平台:
- 开发者日常使用:大多数 Java 开发者都在使用 IntelliJ IDEA
- 强大的 Git 集成:内置了完善的 Git 操作支持
- 插件生态丰富:有成熟的插件开发框架
- 扩展性强:可以通过插件深度集成到 IDE 中
于是,我决定开发一个 IntelliJ IDEA 插件,将 AI 驱动的 Changelog 生成能力直接集成到开发者的日常工作中。
架构设计:打造智能 Changelog 生成器
核心功能定位
在设计这个插件时,我明确了几个核心功能:
- 智能 Changelog 生成:基于 Git 提交记录生成版本更新日志
- 工作日报/周报生成:从提交记录自动生成工作汇报
- 提交信息智能生成:基于代码 diff 生成规范的提交信息
- 多场景集成:在 Git Log、提交页面等多个入口提供功能
技术架构设计
我设计了如下的技术架构:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| ┌─────────────────────────────────────────────────────────────┐ │ IntelliJ IDEA │ ├─────────────────────────────────────────────────────────────┤ │ UI Layer (用户界面层) │ │ ├── Git Log 右键菜单 │ │ ├── Git 提交页面集成 │ │ ├── 设置面板 │ │ └── 结果展示对话框 │ ├─────────────────────────────────────────────────────────────┤ │ Service Layer (业务逻辑层) │ │ ├── ChangelogService (核心服务) │ │ ├── CommitMessageGenerator (提交信息生成器) │ │ ├── Git 操作封装 │ │ └── 模板管理器 │ ├─────────────────────────────────────────────────────────────┤ │ AI Integration Layer (AI 集成层) │ │ ├── IntelliAI Engine 依赖 │ │ ├── Prompt 模板引擎 │ │ └── 响应处理器 │ ├─────────────────────────────────────────────────────────────┤ │ Data Layer (数据层) │ │ ├── Git 提交记录读取 │ │ ├── Code Diff 分析 │ │ └── 配置持久化 │ └─────────────────────────────────────────────────────────────┘
|
核心组件详解
1. ChangelogService - 核心服务类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| @Service(Service.Level.PROJECT) public final class ChangelogService {
@NotNull public String generateChangelog(@NotNull List<String> commitHashes) { List<CommitInfo> commits = readCommits(commitHashes);
String prompt = buildPrompt(commits);
return callAIService(prompt); }
@NotNull public String generateDailyReport(@NotNull List<String> commitHashes) { }
@NotNull public String generateWeeklyReport(@NotNull List<String> commitHashes) { } }
|
2. Git 操作封装
使用 JGit 来读取 Git 提交记录:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
|
@NotNull private List<CommitInfo> readCommits(@NotNull List<String> commitHashes) { List<CommitInfo> commits = new ArrayList<>();
Repository repository = getRepository();
try (Git git = new Git(repository)) { for (String hash : commitHashes) { ObjectId commitId = repository.resolve(hash); if (commitId != null) { RevCommit commit = git.log() .add(commitId) .setMaxCount(1) .call() .iterator() .next();
commits.add(new CommitInfo( commit.getName(), commit.getShortMessage(), commit.getFullMessage(), new Date(commit.getCommitTime() * 1000L), commit.getAuthorIdent().getName() )); } } }
return commits; }
|
3. CodeDiff 分析
为了更准确地生成提交信息,插件还支持基于代码 diff 的分析:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
@NotNull public String generateCommitMessageFromDiff(@NotNull Collection<Change> changes) { List<CodeDiff> codeDiffs = CodeDiffUtil.extractCodeDiffs(changes);
if (codeDiffs.isEmpty()) { throw new Exception("没有检测到代码变更"); }
String prompt = buildPromptFromCodeDiff(codeDiffs);
return callAIServiceForCommitMessage(prompt); }
|
4. 模板引擎
插件支持多种模板,可以满足不同的使用场景:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
@NotNull private String buildPrompt(@NotNull List<CommitInfo> commits) { SettingsState settings = SettingsState.getInstance(); String template = settings.changelogTemplate; String commitsText = buildCommitsText(commits);
return template .replace("{version}", "v1.0.0") .replace("{commits}", commitsText); }
@NotNull private String buildDailyReportPrompt(@NotNull List<CommitInfo> commits) { String template = settings.dailyReportTemplate; String commitsText = buildCommitsText(commits); String date = formatCurrentDate();
return template .replace("{date}", date) .replace("{commits}", commitsText); }
|
功能详解:智能 Changelog 生成器的强大能力
1. 多场景智能生成
插件提供了多种生成场景,满足不同的工作需求:
📋 版本 Changelog 生成
这是最核心的功能,可以基于选中的提交记录生成专业的版本更新日志。
生成前的提交记录:
1 2 3 4 5 6 7
| ### 2024-10-27
- fix: 修复用户登录 token 过期问题 - feat: 新增用户积分系统 - refactor: 重构订单处理逻辑 - fix: 修复支付接口超时问题 - docs: 更新 API 文档
|
AI 生成的 Changelog:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| # v1.2.0 版本更新 (2024-10-27)
## 🚀 新增功能
### 用户积分系统 - 新建完整的用户积分管理体系 - 支持积分获取、消费、查询功能 - 集成签到、分享等积分获取渠道 - 提供积分等级和特权管理
## 🐛 问题修复
### 登录稳定性提升 - 修复了用户登录时 token 过期导致的异常问题 - 优化 token 刷新机制,提升登录体验 - 增强登录状态监控,及时发现问题
### 支付系统优化 - 修复支付接口在高并发下的超时问题 - 优化支付重试机制,提高支付成功率 - 增加支付异常日志,便于问题排查
## 🔧 技术改进
### 订单处理重构 - 重构订单处理的业务逻辑,提升代码可维护性 - 优化订单状态流转,减少逻辑错误 - 改进订单数据结构,提高查询效率
### 文档完善 - 更新 API 接口文档,确保文档与代码同步 - 补充新增功能的详细说明 - 优化文档结构,提升阅读体验
|
📊 工作日报生成
对于需要日常汇报的团队,插件可以基于每日的提交记录生成工作日报:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| # 工作日报 - 2024-10-27
## 📝 今日完成工作
### 功能开发 - **用户积分系统**: 完成了积分体系的核心功能开发,包括积分获取、消费、等级管理等模块 - **API 文档更新**: 同步更新了新增功能的接口文档,确保文档与代码一致性
### 问题修复 - **登录优化**: 解决了用户登录 token 过期的问题,提升了系统稳定性 - **支付接口**: 修复了支付接口超时的 Bug,提高了支付成功率
### 技术优化 - **订单重构**: 对订单处理逻辑进行了重构,优化了代码结构和业务流程 - **性能调优**: 针对高频接口进行了性能优化,减少了响应时间
## 📈 工作成果
- 完成核心功能开发 2 项 - 修复重要 Bug 2 个 - 技术重构优化 2 项 - 代码量约 +800 行
## 🎯 明日计划 - 积分系统单元测试编写 - 支付流程异常场景测试 - 订单系统性能监控集成 - API 文档最终审核
|
📅 工作周报生成
周报生成功能可以汇总一周的工作内容,适合团队汇报:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| # 工作周报 - 2024-10-21 至 2024-10-27
## 🏆 本周重点成果
### 1. 用户积分系统完整上线 ✅ 完成了用户积分系统的全链路开发,从需求分析到功能上线仅用 5 天时间: - **核心功能**: 积分获取、消费、查询、等级管理 - **业务场景**: 签到积分、分享奖励、消费抵扣 - **技术亮点**: 支持高并发写入、实时积分计算、异步积分更新
### 2. 系统稳定性显著提升 ✅ 本周重点解决了多个线上问题: - **登录优化**: 修复 token 过期问题,降低用户投诉率 60% - **支付优化**: 解决支付超时问题,提升支付成功率至 99.5% - **性能提升**: 关键接口响应时间减少 40%
## 📊 数据统计
### 开发成果 - **功能开发**: 2 个主要功能模块 - **Bug 修复**: 4 个高优先级问题 - **技术重构**: 3 个核心模块优化 - **代码提交**: 18 次有效提交
### 质量指标 - **单元测试覆盖率**: 85% (+10%) - **代码审查通过率**: 100% - **线上问题数**: 2 个 (-50%) - **系统可用性**: 99.9%
## 🎯 下周工作计划
### 功能开发 - 用户积分系统的数据统计分析功能 - 积分商城的基础架构搭建 - 推荐系统的算法优化
### 技术优化 - 数据库查询性能优化 - 缓存策略改进 - 日志系统完善
### 团队协作 - 技术分享会:积分系统设计思路 - 代码 Review 流程优化 - 新功能需求评审
|
2. 智能提交信息生成
插件还支持基于代码 diff 生成规范的提交信息,这对于团队开发特别有用:
检测到的代码变更:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| 文件: src/main/java/com/example/service/UserService.java 变更类型: MODIFY 新增行数: 15 删除行数: 8 变更内容: + public class UserService { + + /** + * 根据用户ID获取用户信息 + * @param userId 用户ID + * @return 用户信息 + */ + public UserDTO getUser(String userId) { + // 新的用户查询逻辑 + return userMapper.findById(userId); + } + }
|
AI 生成的提交信息:
1 2 3 4 5 6 7 8
| feat(user): 新增用户查询服务
- 新增 UserService 类,提供用户信息查询功能 - 实现基于用户ID的查询方法 getUser - 集成 MyBatis 进行数据库操作 - 添加完整的 JavaDoc 文档
Closes #123
|
3. 多入口设计,无缝集成
插件在 IntelliJ IDEA 的多个关键位置提供了入口,确保开发者可以在最自然的场景中使用这些功能。
Git Log 右键菜单
在 Git Log 工具窗口中,选中提交记录后右键,可以看到完整的功能菜单:

功能包括:
- 生成 Changelog: 基于选中提交生成版本更新日志
- 生成日报: 基于选中提交生成工作日报
- 生成周报: 基于选中提交生成工作周报
- 生成提交信息: 基于代码 diff 生成提交信息
Git 提交页面集成
在 Git 提交页面的工具栏中,插件添加了一个快捷按钮:

当开发者写完代码变更,但不知道如何写提交信息时,可以点击这个按钮,插件会自动分析代码变更并生成规范的提交信息。
设置面板自定义
插件提供了丰富的配置选项:

配置项包括:
- AI 提供商选择: 选择使用的 AI 服务(OpenAI、Anthropic、Ollama 等)
- 模板定制: 自定义 Changelog、日报、周报的生成模板
- 系统提示词: 调整 AI 的生成风格和要求
- 语言偏好: 设置生成内容的语言和格式
4. 智能模板系统
插件支持高度可定制的模板系统,让不同团队可以根据自己的需求定制生成内容。
默认模板示例
Changelog 模板:
1 2 3 4 5 6 7 8 9 10 11
| 你是一位专业的技术文档撰写专家。请根据以下 Git 提交记录生成一份专业的版本更新日志。
要求: 1. 按照功能类型分类:新功能、问题修复、技术改进、文档更新 2. 每个改动都要说明对用户的实际价值 3. 使用清晰易懂的语言,避免过于技术化的描述 4. 格式要求:使用 Markdown 格式,添加适当的 emoji 图标 5. 版本号:{version}
提交记录: {commits}
|
工作日报模板:
1 2 3 4 5 6 7 8 9 10 11 12
| 你是一位经验丰富的项目经理。请根据以下 Git 提交记录生成一份专业的工作日报。
要求: 1. 按照工作类型分类:功能开发、问题修复、技术优化、文档工作 2. 突出今日的工作成果和价值 3. 包含量化数据(如功能数量、修复问题数等) 4. 说明明日的工作计划 5. 使用积极正面的语言,展现专业的工作态度 6. 日期:{date}
提交记录: {commits}
|
自定义模板
团队可以根据自己的需求定制模板,比如:
1 2 3 4 5 6 7 8
| 你是一位敏捷开发团队的 Scrum Master。请生成一份符合敏捷开发规范的工作日报。
要求: 1. 按照 User Story 的方式组织内容 2. 包含完成的 Story 点数 3. 突出对 Sprint 目标的贡献 4. 识别可能的阻碍和风险 5. 使用 Jira 风格的格式
|
实战案例:真实场景下的应用效果
场景1:版本发布前的冲刺
背景:我们的团队要在周五发布一个重要版本,包含 30 多个功能点和 20 多个 Bug 修复。
传统方式:
- 手动整理 50+ 条 Git 提交记录
- 与每个开发者确认具体功能内容
- 撰写 Changelog 耗时 2-3 小时
- 格式不统一,内容不完整
使用插件后:
- 在 Git Log 中选中版本相关的提交记录
- 右键选择”生成 Changelog”
- 等待 30 秒,AI 自动生成完整的 Changelog
- 简单调整后即可使用
效率提升:从 3 小时缩短到 5 分钟,效率提升 36 倍
生成效果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| # v2.1.0 版本发布 (2024-10-27)
## 🎉 重大更新
### 智能推荐系统上线 - 基于用户行为分析的个性化推荐功能 - 支持商品、内容、服务多维度推荐 - 推荐准确率较之前提升 40% - 实时推荐更新,响应用户最新行为
### 积分商城功能完善 - 新增积分商城完整功能模块 - 支持积分兑换商品、优惠券、会员权益 - 完善的积分规则引擎,支持复杂业务场景 - 积分消费记录和统计分析功能
## 🚀 功能优化
### 用户体验提升 - 优化首页加载速度,响应时间减少 60% - 改进搜索功能,支持模糊搜索和智能纠错 - 完善用户反馈机制,新增在线客服入口 - 移动端界面全面适配,提升移动端体验
### 管理后台增强 - 新增数据可视化大屏功能 - 支持自定义报表生成和导出 - 完善权限管理,支持细粒度权限控制 - 操作日志全面记录,支持审计追踪
## 🐛 问题修复
### 稳定性改进 - 修复高并发下的数据库连接池泄漏问题 - 解决缓存雪崩导致的系统性能下降 - 修复文件上传组件在大文件时的内存溢出问题 - 优化定时任务调度,避免任务堆积
### 数据准确性提升 - 修复订单金额计算精度问题 - 解决库存数据不一致导致的超卖问题 - 修复用户统计数据的实时同步问题 - 优化搜索结果的排序算法准确性
## 🔧 技术升级
### 架构优化 - 引入 Redis 集群,提升缓存性能和可靠性 - 升级 Spring Boot 版本到 2.7.x - 优化数据库索引,提升查询效率 - 实现服务降级和熔断机制,增强系统韧性
### 开发体验 - 完善单元测试覆盖,覆盖率提升至 90% - 优化 CI/CD 流程,缩短部署时间 50% - 新增代码质量检查工具,确保代码规范 - 完善开发文档,提供详细的使用指南
|
场景2:团队工作汇报自动化
背景:我负责一个 10 人开发团队,每周都需要向上级汇报工作进展。
传统方式:
- 收集团队成员的周报
- 查看一周的 Git 提交记录
- 手动分类整理工作内容
- 撰写汇总报告耗时 1-2 小时
使用插件后:
- 选中团队一周的提交记录
- 点击”生成周报”
- AI 自动分析并生成团队周报
- 根据需要进行微调
效率提升:从 2 小时缩短到 10 分钟,效率提升 12 倍
生成效果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
| # 开发团队周报 - 2024-10-21 至 2024-10-27
## 👥 团队整体表现
### 工作成果概览 - **完成功能**: 8 个主要功能模块 - **修复问题**: 15 个 Bug 和问题 - **技术优化**: 12 项技术改进 - **代码提交**: 68 次有效提交 - **代码行数**: +3200 行
### 质量指标 - **单元测试覆盖率**: 88% (+8%) - **代码审查通过率**: 100% - **线上问题数**: 1 个 (-80%) - **系统可用性**: 99.95%
## 🎯 本周重点项目
### 1. 智能推荐系统开发 (完成度: 100%) **负责人**: 张三、李四
**主要成果**: - 完成推荐算法的开发和测试 - 实现用户行为数据采集模块 - 构建推荐结果实时计算引擎 - 集成 A/B 测试框架
**技术亮点**: - 采用协同过滤算法,推荐准确率 85% - 支持百万级用户实时推荐计算 - 响应时间控制在 100ms 以内
### 2. 积分商城功能开发 (完成度: 90%) **负责人**: 王五、赵六
**主要成果**: - 完成积分商城核心功能开发 - 实现积分规则引擎 - 集成第三方支付接口 - 完善后台管理系统
**技术亮点**: - 支持复杂积分规则配置 - 高并发积分写入优化 - 数据一致性保证机制
## 📊 个人工作汇总
### 张三 (前端开发) - **主要工作**: 推荐系统前端界面开发 - **完成功能**: 推荐结果展示、用户偏好设置 - **技术成长**: React Hooks 深度应用
### 李四 (后端开发) - **主要工作**: 推荐算法实现和优化 - **完成功能**: 协同过滤算法、实时计算引擎 - **技术成长**: 机器学习算法工程化
### 王五 (全栈开发) - **主要工作**: 积分商城全栈开发 - **完成功能**: 积分规则引擎、商城界面 - **技术成长**: 微服务架构设计
### 赵六 (后端开发) - **主要工作**: 支付集成和数据统计 - **完成功能**: 第三方支付、报表生成 - **技术成长**: 支付系统安全设计
## 🔍 问题与挑战
### 本周遇到的主要问题 1. **推荐算法冷启动问题**: 通过引入内容推荐缓解 2. **高并发积分写入性能**: 采用异步队列优化 3. **第三方支付接口稳定性**: 实现重试和降级机制
### 解决方案和经验 - 建立完善的监控和告警机制 - 制定应急预案和故障处理流程 - 加强团队技术分享和知识沉淀
## 🚀 下周计划
### 功能开发 - 推荐系统 A/B 测试结果分析 - 积分商城功能测试和上线 - 用户反馈系统开发
### 技术优化 - 推荐算法持续优化 - 系统性能监控完善 - 数据库查询优化
### 团队建设 - 技术分享会:推荐系统实践 - 代码 Review 规范优化 - 新功能需求评审
|
场景3:代码提交规范化
背景:团队新入职了几名 junior 开发者,提交信息格式混乱,代码 Review 困难。
传统方式:
- 制定提交信息规范文档
- 手动指导每个开发者
- 代码 Review 时反复要求修改提交信息
- 耗费大量沟通成本
使用插件后:
- 开发者完成代码修改
- 在 Git 提交页面点击”生成提交信息”
- AI 自动分析代码变更并生成规范的提交信息
- 开发者确认无误后提交
效果提升:团队提交信息规范性从 30% 提升到 95%
生成示例:
代码变更:添加用户密码验证功能
1 2 3 4 5 6 7 8 9 10 11
| + public class PasswordValidator { + +
+ public ValidationResult validate(String password) { + + } + }
|
生成的提交信息:
1 2 3 4 5 6 7 8 9 10
| feat(auth): 新增密码强度验证功能
- 新增 PasswordValidator 类,提供密码强度验证 - 支持密码长度、复杂度、特殊字符等多维度检查 - 实现 ValidationResult 结果封装 - 添加完整的单元测试覆盖
增强了系统的安全性,确保用户密码符合安全要求
Closes #456
|
开发过程中的技术挑战与解决方案
挑战1:Git 提交记录的智能解析
问题:Git 提交记录格式多样,需要智能解析提取有效信息。
解决方案:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
|
@NotNull private String buildCommitsText(@NotNull List<CommitInfo> commits) { if (commits.isEmpty()) { return ""; }
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Map<String, List<CommitInfo>> commitsByDate = new LinkedHashMap<>(); for (CommitInfo commit : commits) { String dateStr = dateFormat.format(commit.date); commitsByDate.computeIfAbsent(dateStr, k -> new ArrayList<>()).add(commit); }
StringBuilder commitsText = new StringBuilder(); for (Map.Entry<String, List<CommitInfo>> entry : commitsByDate.entrySet()) { String dateStr = entry.getKey(); List<CommitInfo> dateCommits = entry.getValue();
commitsText.append("### ").append(dateStr).append("\n\n");
for (CommitInfo commit : dateCommits) { commitsText.append("- ").append(commit.shortMessage).append("\n"); }
commitsText.append("\n"); }
return commitsText.toString().trim(); }
|
关键点:
- 按日期分组,便于 AI 理解时间序列
- 提取 shortMessage,去除冗余信息
- 保持原始提交的顺序关系
挑战2:代码 Diff 分析的准确性
问题:需要准确分析代码变更,避免无关的格式化等噪音影响提交信息生成。
解决方案:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
|
public static List<CodeDiff> extractCodeDiffs(@NotNull Collection<Change> changes) { List<CodeDiff> codeDiffs = new ArrayList<>();
for (Change change : changes) { CodeDiff diff = new CodeDiff();
diff.filePath = getRelativePath(change);
diff.changeType = change.getType();
try { diff.addedLines = countAddedLines(change); diff.deletedLines = countDeletedLines(change);
diff.diffContent = extractMeaningfulDiff(change); } catch (Exception e) { continue; }
if (isMeaningfulChange(diff)) { codeDiffs.add(diff); } }
return codeDiffs; }
private static boolean isMeaningfulChange(CodeDiff diff) { if (diff.addedLines == 0 && diff.deletedLines == 0) { return false; }
if (diff.diffContent != null && diff.diffContent.matches("(?s).*^\\s*[+-]\\s*$.*")) { return false; }
return true; }
|
关键点:
- 统计行数变化,量化变更规模
- 提取有意义的 diff 内容
- 过滤噪音,保持分析准确性
挑战3:AI 提示词的优化
问题:如何设计有效的提示词,让 AI 生成高质量的 Changelog。
解决方案:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
|
private static final String CHANGELOG_SYSTEM_PROMPT = """ 你是一位专业的技术文档撰写专家,在软件公司负责发布说明和技术文档编写。
你的任务是根据 Git 提交记录生成专业、准确、有价值的版本更新日志。
生成原则: 1. 用户导向:重点说明对用户的价值和影响,而不是技术细节 2. 分类清晰:按功能类型、重要程度合理分类 3. 语言简洁:使用易于理解的语言,避免过于技术化 4. 格式规范:使用 Markdown 格式,添加适当的图标和结构 5. 价值突出:每个改动都要说明解决了什么问题,带来什么好处
分类标准: - 🎉 重大更新:重要功能发布、架构升级等 - 🚀 新增功能:新功能模块、新特性等 - 🐛 问题修复:Bug 修复、异常处理等 - 🔧 技术改进:性能优化、重构、技术升级等 - 📚 文档更新:API 文档、使用说明等
输出格式: # 版本号 (发布日期)
## 🎉 重大更新
### 功能名称 - 功能描述和价值 - 技术亮点(可选)
## 🚀 新增功能
### 功能名称 - 功能描述 - 用户价值
## 🐛 问题修复
### 问题描述 - 修复内容 - 带来的改善
## 🔧 技术改进
### 改进内容 - 技术细节 - 性能提升
注意: - 输出内容不要使用 markdown 代码块包裹 - 直接输出内容,不要添加任何代码块标记 - 根据提交记录的实际情况灵活调整分类 """;
|
关键点:
- 明确 AI 的角色和职责
- 设定清晰的生成原则
- 提供具体的分类标准
- 规范输出格式要求
- 添加注意事项和约束
挑战4:与 IntelliAI Engine 的集成
问题:如何利用 IntelliAI Engine 提供的 AI 能力,同时保持插件的独立性。
解决方案:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
|
@NotNull private String callAIService(@NotNull String userPrompt) throws Exception { SettingsState settings = SettingsState.getInstance();
AIProviderConfig config = settings.providerConfig; if (config == null) { throw new Exception("请先配置 AI 提供商"); }
String systemPrompt = settings.systemPrompt; if (systemPrompt == null || systemPrompt.trim().isEmpty()) { systemPrompt = getDefaultSystemPrompt(); }
AIChatRequest request = new AIChatRequest(systemPrompt, userPrompt);
AIService aiService = AIServiceImpl.getInstance();
try { String result = aiService.generateContent(project, request, config, null);
if (result.trim().isEmpty()) { throw new Exception("AI 服务返回空结果"); }
return result; } catch (AIServiceException e) { String errorMessage = e.getMessage(); if (errorMessage != null && !errorMessage.isEmpty()) { throw new Exception("AI 服务调用失败: " + errorMessage); } else { throw new Exception("AI 服务调用失败,请检查网络连接和配置"); } } }
|
关键点:
- 复用 IntelliAI Engine 的统一 AI 接口
- 支持灵活的 AI 提供商配置
- 提供友好的错误处理
- 保持插件的独立性和可配置性
性能优化与用户体验
1. 异步处理,避免界面卡顿
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| public class GenerateChangelogForGitLogAction extends AbstractGitLogAction {
@Override protected void actionPerformed(@NotNull AnActionEvent e, @NotNull List<String> commitHashes) { Project project = e.getProject(); if (project == null) return;
ProgressManager.getInstance().run(new Task.Backgroundable(project, "生成 Changelog") {
@Override public void run(@NotNull ProgressIndicator indicator) { try { indicator.setText("正在读取提交记录..."); indicator.setIndeterminate(false);
ChangelogService service = ChangelogService.getInstance(project);
String changelog = service.generateChangelog(commitHashes);
ApplicationManager.getApplication().invokeLater(() -> { showResultDialog(project, changelog); });
} catch (Exception ex) { ApplicationManager.getApplication().invokeLater(() -> { showErrorDialog(project, ex.getMessage()); }); } } }); } }
|
2. 智能缓存,减少重复计算
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| public class ChangelogService {
private final Map<String, String> commitCache = new ConcurrentHashMap<>();
@NotNull private List<CommitInfo> readCommits(@NotNull List<String> commitHashes) { List<CommitInfo> commits = new ArrayList<>();
Repository repository = getRepository();
try (Git git = new Git(repository)) { for (String hash : commitHashes) { String cached = commitCache.get(hash); if (cached != null) { commits.add(deserializeCommitInfo(cached)); continue; }
CommitInfo commit = readSingleCommit(git, repository, hash); if (commit != null) { commits.add(commit); commitCache.put(hash, serializeCommitInfo(commit)); } } }
return commits; } }
|
3. 批量处理优化
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| public class BatchProcessor {
public void processBatch(@NotNull Project project, @NotNull List<List<String>> commitGroups) {
ExecutorService executor = Executors.newFixedThreadPool( Math.min(commitGroups.size(), 4) );
List<Future<String>> futures = new ArrayList<>();
for (List<String> group : commitGroups) { futures.add(executor.submit(() -> { ChangelogService service = ChangelogService.getInstance(project); return service.generateChangelog(group); })); }
List<String> results = new ArrayList<>(); for (Future<String> future : futures) { try { results.add(future.get()); } catch (Exception e) { results.add("生成失败: " + e.getMessage()); } }
executor.shutdown(); } }
|
实际效果与用户反馈
效率提升数据
通过在实际项目中的使用,插件带来了显著的效率提升:
| 场景 | 传统方式耗时 | 插件方式耗时 | 效率提升 |
|---|
| 版本 Changelog 生成 | 2-3 小时 | 5-10 分钟 | 24x |
| 工作日报撰写 | 30-60 分钟 | 3-5 分钟 | 12x |
| 工作周报汇总 | 1-2 小时 | 10-15 分钟 | 8x |
| 提交信息规范 | 不适用 | 95% 规范率 | 质量提升 |
用户反馈
团队负责人:
“这个插件彻底改变了我们的版本发布流程。以前每次发版本都要花半天时间整理 Changelog,现在几分钟就搞定了,而且质量比手动写的还要好。”
开发者:
“最让我惊喜的是提交信息生成功能。以前经常不知道怎么写提交信息,现在 AI 能分析代码变更,自动生成规范的提交信息,团队代码 Review
的效率也提升了。”
产品经理:
“现在能及时了解每次版本更新了什么,生成的 Changelog 很专业,用户反馈也很好。以前版本更新日志经常被用户吐槽看不懂,现在完全没这个问题了。”
未来规划
虽然插件现在已经很强大了,但我还有很多改进计划:
短期目标
多语言支持
- 支持英文 Changelog 生成
- 多语言混合项目的智能处理
- 国际化的模板和提示词
智能分类增强
- 基于代码变更的自动分类
- 业务维度的智能归类
- 重要性的自动判断
协作功能
- 团队共享的 Changelog 模板
- 多人协作的周报生成
- 组织级的规范管理
长期愿景
全流程自动化
- 从代码变更到版本发布的全自动化
- 智能版本号管理
- 自动化的发布流程
智能项目管理
- 基于代码进度的项目跟踪
- 智能的风险识别
- 自动化的项目报告
知识图谱集成
- 项目知识的智能提取
- 代码变更的知识关联
- 智能的文档生成
开源与社区
和 JavaDoc 插件一样,这个项目也已经在 GitHub 上开源:
参与方式
- 使用反馈:安装使用插件,提出改进建议
- 代码贡献:修复 Bug、添加新功能、完善文档
- 模板分享:分享自定义模板,帮助其他团队
- 推广传播:推荐给其他可能需要的朋友
贡献指南
详细的贡献指南包括:
- 开发环境搭建
- 插件构建和调试
- 代码规范要求
- 测试用例编写
- Pull Request 流程
总结与感悟
开发这个智能 Changelog 生成器的过程,让我深刻体会到了几个重要的设计理念:
技术理念的升华
AI 辅助开发的未来:AI 不是要取代开发者,而是要成为开发者的智能助手,帮助我们处理那些重复性、规律性的工作
工具化思维的重要性:把日常工作中遇到的痛点工具化,不仅能够提升个人效率,还能够帮助团队和社区
用户体验的价值:好的工具应该无缝集成到用户的日常工作流程中,而不是增加额外的学习成本
工程思维的培养
系统性解决问题:不是简单地解决单一问题,而是从系统层面思考,构建完整的解决方案
可扩展架构设计:在开发初期就考虑未来的扩展性,让插件能够持续演进
质量与效率的平衡:在追求功能强大的同时,也要关注代码质量和用户体验
团队协作的思考
规范化的价值:好的工具能够帮助团队建立规范,提升整体协作效率
知识沉淀的重要性:工具不仅是提升效率,更是团队知识的沉淀和传承
持续改进的文化:工具的演进反映了团队持续改进的文化和追求
致谢
感谢所有为这个项目提供帮助的人和工具:
特别感谢
- IntelliJ IDEA 团队:提供了强大的插件开发平台
- AI 服务商:OpenAI、Anthropic、Ollama 等提供的技术支持
- 测试用户:早期使用并提供宝贵反馈的同事们
技术感谢
- JGit:强大的 Java Git 操作库
- IntelliJ Platform SDK:完善的插件开发框架
- Java 17:现代 Java 语言特性的支持
- Gradle:灵活的构建工具
相关链接
插件地址
相关项目
个人链接
参考资源
如果你也经常为 Changelog 管理、工作汇报、提交信息书写而烦恼,不妨试试这个插件。它不仅能够大幅提升你的工作效率,还能帮助团队建立规范的开发流程。欢迎在
GitHub 上 Star 和 Fork,一起让软件开发变得更加高效和有趣! 🚀✨