aigit-cli
Version:
AI-powered git commit message generator using OpenAI or DeepSeek
581 lines (444 loc) • 13.3 kB
Markdown
# AIGit - AI驱动的Git Commit Message生成器
一个基于OpenAI的智能Git commit message生成工具,能够自动分析代码变更并生成清晰、规范的commit message。
## ✨ 特性
- 🤖 支持OpenAI和DeepSeek两种AI服务
- 🌍 支持多种语言(中文、英文等)
- 📝 支持多种commit message风格(Conventional Commits、简洁、详细)
- 🔍 **智能项目配置检测** - 自动检测项目commit规范并调整配置
- 🔍 **AI代码审查** - 智能分析代码变更并给出修改建议
- ⚙️ 灵活的配置选项
- 🔍 预览模式,不直接提交
- 🚀 支持自动提交
- 💡 智能提示和错误处理
- 🔑 交互式AI服务选择和API密钥配置
## 🚀 快速开始
### 1. 从npm安装(推荐)
```bash
# 全局安装
npm install -g aigit-cli
# 验证安装
aigit --version
```
### 2. 从源码安装
#### 方法1: 使用安装脚本
```bash
# 克隆项目
git clone <your-repo-url>
cd aigit
# 运行安装脚本
./install-global.sh
```
#### 方法2: 手动安装
```bash
# 克隆项目
git clone <your-repo-url>
cd aigit
# 安装依赖
npm install
# 创建全局链接
npm link
```
#### 方法3: 开发模式
```bash
# 安装依赖
npm install
# 运行CLI
npm start
# 或者
node bin/aigit.js
```
### 2. 配置AI服务提供商和API密钥
#### 方法1: 交互式配置(推荐)
首次运行时,CLI工具会提示你选择AI服务提供商并输入API密钥:
```bash
node bin/aigit.js
# 工具会提示选择OpenAI或DeepSeek
# 然后输入对应的API密钥
# 选择是否保存到配置文件
```
#### 方法2: 环境变量
```bash
# 选择OpenAI
export AI_PROVIDER="openai"
export OPENAI_API_KEY="your-openai-api-key-here"
# 或选择DeepSeek
export AI_PROVIDER="deepseek"
export DEEPSEEK_API_KEY="your-deepseek-api-key-here"
```
#### 方法3: 配置文件
在用户主目录创建 `~/.aigitrc` 文件:
```json
{
"provider": "openai",
"openaiApiKey": "your-openai-api-key-here",
"openaiModel": "gpt-4",
"deepseekApiKey": "your-deepseek-api-key-here",
"deepseekModel": "deepseek-chat",
"temperature": 0.8,
"language": "中文",
"style": "conventional"
}
```
#### 方法4: 查看配置帮助
```bash
node bin/aigit.js --config-help
```
### 3. 使用CLI工具
```bash
# 基本使用(全局安装后)- 自动add、提交、合并master
aigit
# 指定AI服务提供商
aigit -p openai
# 指定AI模型
aigit -m gpt-4
# 指定语言
aigit -l 中文
# 指定风格
aigit -s conventional
# 预览模式(不提交,不add)
aigit -d
# 禁用自动添加文件
aigit --no-auto-add
# 禁用自动合并master
aigit --no-auto-merge
# 查看帮助
aigit --help
# 查看配置帮助
aigit --config-help
```
## 📖 使用方法
### 基本工作流程
1. **准备代码变更**
```bash
git add . # 添加文件到暂存区
```
2. **生成commit message**
```bash
node bin/aigit.js
```
3. **查看生成的message**
工具会显示AI生成的commit message
4. **选择操作**
- 使用 `--dry-run` 预览
- 自动提交(默认行为)
- 手动复制message进行提交
## 🚀 发布到npm
### 发布到官方npm (npmjs.com)
项目已配置为发布到官方npm registry。使用以下脚本:
```bash
# 发布到官方npm
./publish-npmjs.sh
# 或手动发布
npm publish --registry=https://registry.npmjs.org/
```
### 发布到私有npm
如果需要发布到私有npm registry:
```bash
# 发布到私有npm
./publish-npm.sh
```
## 🔍 智能项目配置检测
AIGit现在具备智能项目配置检测功能,能够自动分析项目结构并推荐最适合的commit配置:
### 自动检测的配置类型
1. **Commitlint配置**
- 检测 `.commitlintrc*` 文件
- 检测 `commitlint.config.js/ts` 文件
- 自动推荐使用 `conventional` 风格
2. **Conventional Changelog配置**
- 检测 `package.json` 中的相关依赖
- 支持多种预设(angular、eslint、express等)
- 自动推荐使用 `conventional` 风格
3. **Commitizen配置**
- 检测 `package.json` 中的 `commitizen` 配置
- 自动推荐使用 `conventional` 风格
4. **Git模板配置**
- 检测 `.gitmessage` 文件
- 检测全局和项目级commit模板
- 自动推荐使用 `detailed` 风格
5. **Husky配置**
- 检测 `.husky` 目录和配置
- 识别git hooks配置
6. **项目类型推断**
- 开源项目:推荐 `conventional` 风格
- 应用项目:推荐 `simple` 风格
- 库/框架项目:推荐 `conventional` 风格
### 使用方法
```bash
# 检测项目配置(不生成commit)
aigit --detect-project
# 自动使用检测到的配置生成commit
aigit
# 强制使用特定风格(覆盖自动检测)
aigit -s conventional
```
### 检测结果示例
```
🔍 项目配置检测结果:
──────────────────────────────────────────────────
📝 推荐Commit风格: conventional
🌍 推荐语言: 中文
💡 推荐原因: 检测到commitlint配置, 检测到.gitmessage模板文件, 检测到开源项目配置
✅ 检测到commitlint配置
✅ 检测到.gitmessage模板
──────────────────────────────────────────────────
```
## 🔍 AI代码审查
AIGit现在支持AI驱动的代码审查功能,能够智能分析代码变更并提供专业的修改建议:
### 支持的审查类型
1. **全面审查** (`comprehensive`) - 默认
- 代码质量和最佳实践
- 潜在的安全问题
- 性能优化建议
- 代码可读性和维护性
- 测试覆盖建议
- 文档完善建议
2. **安全审查** (`security`)
- 输入验证和清理
- 权限控制
- 数据泄露风险
- 注入攻击风险
- 认证和授权
- 加密和哈希
- 日志和监控
3. **性能审查** (`performance`)
- 算法复杂度
- 内存使用
- 数据库查询优化
- 缓存策略
- 异步处理
- 资源管理
- 监控和指标
4. **可维护性审查** (`maintainability`)
- 代码结构设计
- 模块化程度
- 依赖关系
- 代码重复
- 命名规范
- 错误处理
- 扩展性
### 使用方法
```bash
# 执行全面代码审查
aigit --code-review
# 执行安全审查
aigit --code-review --review-type security
# 执行性能审查
aigit --code-review --review-type performance
# 执行可维护性审查
aigit --code-review --review-type maintainability
# 仅生成审查摘要
aigit --code-review --review-summary
# 指定AI模型
aigit --code-review --model gpt-4
```
### 审查结果示例
```
🔍 AI代码审查
📊 代码质量指标:
────────────────────────────────────────
变更行数: 40
变更文件数: 1
新增行数: 34
删除行数: 6
复杂度: low
风险等级: low
────────────────────────────────────────
🤖 正在执行AI代码审查...
🔍 代码审查结果:
──────────────────────────────────────────────────
## 🔍 代码审查结果
### ✅ 优点
- 增加了输入验证和类型检查,提高了代码的健壮性
- 添加了基本的XSS防护,过滤了HTML标签字符
- 实现了错误处理机制,使用try-catch捕获异常
### ⚠️ 需要注意的问题
- XSS防护不够全面,仅过滤了<>字符,建议使用更完整的HTML转义方案
- 权限验证函数缺乏详细的错误日志记录
### 🚨 严重问题
- 存在权限提升风险,需要加强安全验证
### 💡 改进建议
- 使用专业的XSS防护库
- 实现更细粒度的权限控制
- 添加完整的日志系统
──────────────────────────────────────────────────
```
## 💰 Token优化
为了减少API调用成本,工具内置了智能的token优化功能:
### 自动优化策略
1. **智能diff处理**
- 自动移除不必要的git diff信息
- 限制上下文行数(--unified=1)
- 移除文件路径前缀
2. **内容截断**
- 当文件数量 > 10时,自动使用统计模式
- 限制diff最大长度为2000字符
- 智能保留重要信息
3. **Prompt优化**
- 简化prompt模板
- 减少系统消息长度
- 优化指令描述
### 配置选项
在 `~/.aigitrc` 中可以配置:
```json
{
"useSimplifiedDiff": true, // 启用简化diff模式
"maxDiffLength": 2000 // 最大diff长度
}
```
### 测试优化效果
```bash
# 测试token优化
node test-token-optimization.js
```
### 命令行参数
| 参数 | 简写 | 说明 | 默认值 |
|------|------|------|--------|
| `--provider` | `-p` | AI服务提供商 (openai/deepseek) | `openai` |
| `--model` | `-m` | AI模型 | `gpt-3.5-turbo` |
| `--temperature` | `-t` | AI生成温度 | `0.7` |
| `--language` | `-l` | 输出语言 | `中文` |
| `--style` | `-s` | Commit风格 | `conventional` |
| `--dry-run` | `-d` | 预览模式(不提交,不add) | `false` |
| `--no-auto-add` | | 禁用自动git add . | `false` |
| `--no-auto-merge` | | 禁用自动合并master分支 | `false` |
| `--config-help` | | 显示配置帮助 | `false` |
| `--detect-project` | | 检测并显示项目配置 | `false` |
| `--code-review` | | 执行AI代码审查 | `false` |
| `--review-type <type>` | | 代码审查类型 (comprehensive/security/performance/maintainability) | `comprehensive` |
| `--review-summary` | | 仅生成代码审查摘要 | `false` |
### Commit Message风格
#### 1. Conventional Commits (`conventional`)
```
feat(auth): 添加用户登录功能
fix(api): 修复用户数据获取错误
docs(readme): 更新安装说明
```
#### 2. 简洁风格 (`simple`)
```
添加用户登录功能
修复API错误
更新文档
```
#### 3. 详细风格 (`detailed`)
```
feat: 实现用户认证系统
- 添加JWT token支持
- 实现密码加密
- 添加用户会话管理
- 支持记住登录状态
```
## ⚙️ 配置选项
### 环境变量
- `AI_PROVIDER`: AI服务提供商 (`openai` 或 `deepseek`)
- `OPENAI_API_KEY`: OpenAI API密钥(当provider为openai时必需)
- `DEEPSEEK_API_KEY`: DeepSeek API密钥(当provider为deepseek时必需)
### 配置文件 (~/.aigitrc)
```json
{
"openaiApiKey": "your-api-key",
"openaiModel": "gpt-4",
"temperature": 0.8,
"language": "中文",
"style": "conventional",
"maxTokens": 150
}
```
### 配置优先级
1. 命令行参数(最高)
2. 配置文件
3. 环境变量
4. 默认值(最低)
## 🔧 开发
### 项目结构
```
aigit/
├── bin/
│ └── aigit.js # CLI入口文件
├── src/
│ ├── config.js # 配置管理
│ ├── generator.js # AI生成器
│ ├── git.js # Git操作
│ ├── project-config.js # 项目配置检测
│ └── code-review.js # AI代码审查
├── package.json
├── example-config.json # 示例配置文件
└── README.md
```
### 本地开发
```bash
# 安装依赖
npm install
# 运行CLI
npm start
# 或者直接运行
node bin/aigit.js
# 全局安装
npm link
# 卸载全局链接
npm unlink aigit
```
### 添加新功能
1. 在相应模块中添加功能
2. 更新CLI参数解析
3. 添加测试用例
4. 更新文档
## 🐛 故障排除
### 常见问题
#### 1. "缺少AI服务提供商配置"错误
- 首次运行时会提示选择AI服务提供商并输入API密钥
- 检查环境变量 `AI_PROVIDER` 是否设置
- 检查对应的API密钥环境变量是否设置
- 检查配置文件 `~/.aigitrc` 是否正确
- 确保API密钥有效且未过期
#### 2. "当前目录不是git仓库"错误
- 确保在git仓库目录中运行命令
- 运行 `git init` 初始化仓库
#### 3. "没有检测到代码变更"错误
- 使用 `git add` 添加文件到暂存区
- 检查是否有未保存的修改
#### 4. AI API错误
- 检查网络连接
- 验证API密钥和配额
- 检查模型名称是否正确
- 确认选择的AI服务提供商是否正确
### 调试模式
```bash
# 启用详细日志
DEBUG=* node bin/aigit.js
```
## 📝 许可证
MIT License
## 🤝 贡献
欢迎提交Issue和Pull Request!
## 📞 支持
如果遇到问题,请:
1. 查看故障排除部分
2. 搜索现有Issue
3. 创建新的Issue并提供详细信息
## 🌍 全局安装
### 安装到全局
```bash
# 在项目目录下运行
npm link
# 验证安装
aigit --version
```
### 从全局卸载
```bash
# 卸载全局链接
npm unlink aigit
# 或者运行卸载脚本
./uninstall-global.sh
```
### 在任何目录使用
全局安装后,你可以在任何目录下使用 `aigit` 命令:
```bash
cd /path/to/your/project
aigit # 生成commit message
aigit -p openai # 使用OpenAI
aigit -p deepseek # 使用DeepSeek
aigit --detect-project # 检测项目配置
aigit --help # 查看帮助
```
---
**注意**: 使用此工具需要有效的OpenAI或DeepSeek API密钥,会产生相应的API调用费用。