# AI Git Utils: 智能 Git Commit 助手 🚀
[](https://badge.fury.io/py/ai-git-utils)
**AI Git Utils** 是一个利用 AI 技术增强您 Git 工作流程的智能化工具。它能够根据您的代码变更自动生成规范、清晰且富有表现力的 Commit Message,并智能推荐相关的 Emoji,显著提升版本控制的效率和体验。

---
## ✨ 核心特性
- **🤖 AI 驱动的 Commit Message 生成:** 基于代码 `diff`,智能生成符合 [Conventional Commits](https://www.conventionalcommits.org/) 规范的提交信息(包含 `type`, `scope`, `subject`, `body`)。
- **✍️ 交互式编辑:** 在 AI 生成建议后,提供便捷的交互式编辑界面,允许您轻松修改和确认最终的 Commit Message。
- **😄 智能 Emoji 选择:** 根据 Commit 类型自动推荐合适的 Emoji,让您的提交记录更生动、直观。
- **🔌 多模型支持与灵活配置:**
- 支持接入多种兼容 OpenAI API 标准的大语言模型 (LLM)。
- 通过简单的命令行指令即可添加、删除、切换和管理不同的 AI 模型配置。
- **📜 增强的 Git Log:** 使用 `aigit log` 命令,以美观的表格形式展示提交历史,支持限制数量和时间范围过滤。
---
## 🛠️ 安装
确保您已安装 Python 3.8+。然后通过 pip 安装:
```bash
pip install ai-git-utils
```
---
## ⚙️ 配置 AI 模型
在使用 `aigit commit` 功能前,您需要至少配置一个 AI 模型。
1. **添加模型配置:**
运行 `aigit model add` 并根据提示输入模型信息:
```bash
aigit model add
# Name: my-gpt4o (自定义模型名称)
# Model: gpt-4o (模型 ID)
# Base Url: https://api.openai.com/v1 (模型服务 API 地址)
# Temperature: 0.7 (模型温度参数)
# Api Key: sk-xxxx (您的 API 密钥)
```
添加的第一个模型会自动设为当前激活模型。
2. **管理模型:**
- 列出所有已配置模型: `aigit model list`
- 查看当前激活模型的详细配置: `aigit model show`
- 激活其他已配置模型: `aigit model active` (根据提示输入名称)
- 删除指定模型配置: `aigit model remove` (根据提示输入名称)
---
## 🚀 使用指南
### 1. 生成 AI Commit Message (核心功能)
在您的 Git 仓库中,当您有暂存的更改 (staged changes) 时,运行:
```bash
# 默认使用英文生成
aigit commit
# 指定使用中文生成
aigit commit --lang Chinese
# 只针对特定文件的更改生成 commit message
aigit commit --file path/to/your/file.py
```
## 🤝 贡献
欢迎各种形式的贡献!如果您有任何建议、发现 Bug 或想改进功能,请随时:
1. Fork 本仓库
2. 创建您的特性分支 (`git checkout -b feature/AmazingFeature`)
3. 提交您的更改 (`aigit commit` 😉)
4. 推送到分支 (`git push origin feature/AmazingFeature`)
5. 提交 Pull Request
Raw data
{
"_id": null,
"home_page": null,
"name": "ai-git-utils",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.11",
"maintainer_email": "curry tang <twn39@163.com>",
"keywords": "ai, aigit, git",
"author": null,
"author_email": "curry tang <twn39@163.com>",
"download_url": "https://files.pythonhosted.org/packages/9b/7c/e62c0ed3a08f6b2b00e00ebed8fbeb6fedce0270f3a7506d6706f532450d/ai_git_utils-0.4.1.tar.gz",
"platform": null,
"description": "# AI Git Utils: \u667a\u80fd Git Commit \u52a9\u624b \ud83d\ude80\n\n[](https://badge.fury.io/py/ai-git-utils)\n\n**AI Git Utils** \u662f\u4e00\u4e2a\u5229\u7528 AI \u6280\u672f\u589e\u5f3a\u60a8 Git \u5de5\u4f5c\u6d41\u7a0b\u7684\u667a\u80fd\u5316\u5de5\u5177\u3002\u5b83\u80fd\u591f\u6839\u636e\u60a8\u7684\u4ee3\u7801\u53d8\u66f4\u81ea\u52a8\u751f\u6210\u89c4\u8303\u3001\u6e05\u6670\u4e14\u5bcc\u6709\u8868\u73b0\u529b\u7684 Commit Message\uff0c\u5e76\u667a\u80fd\u63a8\u8350\u76f8\u5173\u7684 Emoji\uff0c\u663e\u8457\u63d0\u5347\u7248\u672c\u63a7\u5236\u7684\u6548\u7387\u548c\u4f53\u9a8c\u3002\n\n\n\n---\n\n## \u2728 \u6838\u5fc3\u7279\u6027\n\n- **\ud83e\udd16 AI \u9a71\u52a8\u7684 Commit Message \u751f\u6210:** \u57fa\u4e8e\u4ee3\u7801 `diff`\uff0c\u667a\u80fd\u751f\u6210\u7b26\u5408 [Conventional Commits](https://www.conventionalcommits.org/) \u89c4\u8303\u7684\u63d0\u4ea4\u4fe1\u606f\uff08\u5305\u542b `type`, `scope`, `subject`, `body`\uff09\u3002\n- **\u270d\ufe0f \u4ea4\u4e92\u5f0f\u7f16\u8f91:** \u5728 AI \u751f\u6210\u5efa\u8bae\u540e\uff0c\u63d0\u4f9b\u4fbf\u6377\u7684\u4ea4\u4e92\u5f0f\u7f16\u8f91\u754c\u9762\uff0c\u5141\u8bb8\u60a8\u8f7b\u677e\u4fee\u6539\u548c\u786e\u8ba4\u6700\u7ec8\u7684 Commit Message\u3002\n- **\ud83d\ude04 \u667a\u80fd Emoji \u9009\u62e9:** \u6839\u636e Commit \u7c7b\u578b\u81ea\u52a8\u63a8\u8350\u5408\u9002\u7684 Emoji\uff0c\u8ba9\u60a8\u7684\u63d0\u4ea4\u8bb0\u5f55\u66f4\u751f\u52a8\u3001\u76f4\u89c2\u3002\n- **\ud83d\udd0c \u591a\u6a21\u578b\u652f\u6301\u4e0e\u7075\u6d3b\u914d\u7f6e:**\n - \u652f\u6301\u63a5\u5165\u591a\u79cd\u517c\u5bb9 OpenAI API \u6807\u51c6\u7684\u5927\u8bed\u8a00\u6a21\u578b (LLM)\u3002\n - \u901a\u8fc7\u7b80\u5355\u7684\u547d\u4ee4\u884c\u6307\u4ee4\u5373\u53ef\u6dfb\u52a0\u3001\u5220\u9664\u3001\u5207\u6362\u548c\u7ba1\u7406\u4e0d\u540c\u7684 AI \u6a21\u578b\u914d\u7f6e\u3002\n- **\ud83d\udcdc \u589e\u5f3a\u7684 Git Log:** \u4f7f\u7528 `aigit log` \u547d\u4ee4\uff0c\u4ee5\u7f8e\u89c2\u7684\u8868\u683c\u5f62\u5f0f\u5c55\u793a\u63d0\u4ea4\u5386\u53f2\uff0c\u652f\u6301\u9650\u5236\u6570\u91cf\u548c\u65f6\u95f4\u8303\u56f4\u8fc7\u6ee4\u3002\n\n---\n\n## \ud83d\udee0\ufe0f \u5b89\u88c5\n\n\u786e\u4fdd\u60a8\u5df2\u5b89\u88c5 Python 3.8+\u3002\u7136\u540e\u901a\u8fc7 pip \u5b89\u88c5\uff1a\n\n```bash\npip install ai-git-utils\n```\n\n---\n\n## \u2699\ufe0f \u914d\u7f6e AI \u6a21\u578b\n\n\u5728\u4f7f\u7528 `aigit commit` \u529f\u80fd\u524d\uff0c\u60a8\u9700\u8981\u81f3\u5c11\u914d\u7f6e\u4e00\u4e2a AI \u6a21\u578b\u3002\n\n1. **\u6dfb\u52a0\u6a21\u578b\u914d\u7f6e:**\n \u8fd0\u884c `aigit model add` \u5e76\u6839\u636e\u63d0\u793a\u8f93\u5165\u6a21\u578b\u4fe1\u606f\uff1a\n\n ```bash\n aigit model add\n # Name: my-gpt4o (\u81ea\u5b9a\u4e49\u6a21\u578b\u540d\u79f0)\n # Model: gpt-4o (\u6a21\u578b ID)\n # Base Url: https://api.openai.com/v1 (\u6a21\u578b\u670d\u52a1 API \u5730\u5740)\n # Temperature: 0.7 (\u6a21\u578b\u6e29\u5ea6\u53c2\u6570)\n # Api Key: sk-xxxx (\u60a8\u7684 API \u5bc6\u94a5)\n ```\n\n \u6dfb\u52a0\u7684\u7b2c\u4e00\u4e2a\u6a21\u578b\u4f1a\u81ea\u52a8\u8bbe\u4e3a\u5f53\u524d\u6fc0\u6d3b\u6a21\u578b\u3002\n\n2. **\u7ba1\u7406\u6a21\u578b:**\n - \u5217\u51fa\u6240\u6709\u5df2\u914d\u7f6e\u6a21\u578b: `aigit model list`\n - \u67e5\u770b\u5f53\u524d\u6fc0\u6d3b\u6a21\u578b\u7684\u8be6\u7ec6\u914d\u7f6e: `aigit model show`\n - \u6fc0\u6d3b\u5176\u4ed6\u5df2\u914d\u7f6e\u6a21\u578b: `aigit model active` (\u6839\u636e\u63d0\u793a\u8f93\u5165\u540d\u79f0)\n - \u5220\u9664\u6307\u5b9a\u6a21\u578b\u914d\u7f6e: `aigit model remove` (\u6839\u636e\u63d0\u793a\u8f93\u5165\u540d\u79f0)\n\n---\n\n## \ud83d\ude80 \u4f7f\u7528\u6307\u5357\n\n### 1. \u751f\u6210 AI Commit Message (\u6838\u5fc3\u529f\u80fd)\n\n\u5728\u60a8\u7684 Git \u4ed3\u5e93\u4e2d\uff0c\u5f53\u60a8\u6709\u6682\u5b58\u7684\u66f4\u6539 (staged changes) \u65f6\uff0c\u8fd0\u884c\uff1a\n\n```bash\n# \u9ed8\u8ba4\u4f7f\u7528\u82f1\u6587\u751f\u6210\naigit commit\n\n# \u6307\u5b9a\u4f7f\u7528\u4e2d\u6587\u751f\u6210\naigit commit --lang Chinese\n\n# \u53ea\u9488\u5bf9\u7279\u5b9a\u6587\u4ef6\u7684\u66f4\u6539\u751f\u6210 commit message\naigit commit --file path/to/your/file.py\n```\n\n## \ud83e\udd1d \u8d21\u732e\n\n\u6b22\u8fce\u5404\u79cd\u5f62\u5f0f\u7684\u8d21\u732e\uff01\u5982\u679c\u60a8\u6709\u4efb\u4f55\u5efa\u8bae\u3001\u53d1\u73b0 Bug \u6216\u60f3\u6539\u8fdb\u529f\u80fd\uff0c\u8bf7\u968f\u65f6\uff1a\n\n1. Fork \u672c\u4ed3\u5e93\n2. \u521b\u5efa\u60a8\u7684\u7279\u6027\u5206\u652f (`git checkout -b feature/AmazingFeature`)\n3. \u63d0\u4ea4\u60a8\u7684\u66f4\u6539 (`aigit commit` \ud83d\ude09)\n4. \u63a8\u9001\u5230\u5206\u652f (`git push origin feature/AmazingFeature`)\n5. \u63d0\u4ea4 Pull Request\n",
"bugtrack_url": null,
"license": null,
"summary": "AI git utils is an intelligent Git commit assistant that leverages AI to enhance your Git workflow.",
"version": "0.4.1",
"project_urls": {
"Documentation": "https://github.com/twn39/aigit",
"Homepage": "https://github.com/twn39/aigit",
"Repository": "https://github.com/twn39/aigit",
"Source Code": "https://github.com/twn39/aigit"
},
"split_keywords": [
"ai",
" aigit",
" git"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "91e16f9858867114bc08c36c489e055f01a8d80eff3e658e2e1e754c01904124",
"md5": "f361dd8923de5a1dff24250469e0944e",
"sha256": "d98522186a35d3ede7709444d5e2874ab0bbdedfd17214fbb624abc36e3bae7c"
},
"downloads": -1,
"filename": "ai_git_utils-0.4.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "f361dd8923de5a1dff24250469e0944e",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.11",
"size": 10530,
"upload_time": "2025-08-08T01:41:25",
"upload_time_iso_8601": "2025-08-08T01:41:25.920617Z",
"url": "https://files.pythonhosted.org/packages/91/e1/6f9858867114bc08c36c489e055f01a8d80eff3e658e2e1e754c01904124/ai_git_utils-0.4.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "9b7ce62c0ed3a08f6b2b00e00ebed8fbeb6fedce0270f3a7506d6706f532450d",
"md5": "86e10b18258d3533aac753f56294de0a",
"sha256": "8c6058e9bbd527c4c50729543c050e518809a3e7c788a5cbaa30beacb1967f5f"
},
"downloads": -1,
"filename": "ai_git_utils-0.4.1.tar.gz",
"has_sig": false,
"md5_digest": "86e10b18258d3533aac753f56294de0a",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.11",
"size": 305753,
"upload_time": "2025-08-08T01:41:28",
"upload_time_iso_8601": "2025-08-08T01:41:28.232202Z",
"url": "https://files.pythonhosted.org/packages/9b/7c/e62c0ed3a08f6b2b00e00ebed8fbeb6fedce0270f3a7506d6706f532450d/ai_git_utils-0.4.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-08-08 01:41:28",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "twn39",
"github_project": "aigit",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"requirements": [
{
"name": "annotated-types",
"specs": [
[
"==",
"0.7.0"
]
]
},
{
"name": "anyio",
"specs": [
[
"==",
"4.10.0"
]
]
},
{
"name": "certifi",
"specs": [
[
"==",
"2025.8.3"
]
]
},
{
"name": "click",
"specs": [
[
"==",
"8.2.1"
]
]
},
{
"name": "distro",
"specs": [
[
"==",
"1.9.0"
]
]
},
{
"name": "gitdb",
"specs": [
[
"==",
"4.0.12"
]
]
},
{
"name": "gitpython",
"specs": [
[
"==",
"3.1.45"
]
]
},
{
"name": "h11",
"specs": [
[
"==",
"0.16.0"
]
]
},
{
"name": "httpcore",
"specs": [
[
"==",
"1.0.9"
]
]
},
{
"name": "httpx",
"specs": [
[
"==",
"0.28.1"
]
]
},
{
"name": "idna",
"specs": [
[
"==",
"3.10"
]
]
},
{
"name": "jiter",
"specs": [
[
"==",
"0.10.0"
]
]
},
{
"name": "markdown-it-py",
"specs": [
[
"==",
"3.0.0"
]
]
},
{
"name": "mdurl",
"specs": [
[
"==",
"0.1.2"
]
]
},
{
"name": "openai",
"specs": [
[
"==",
"1.99.3"
]
]
},
{
"name": "pip",
"specs": [
[
"==",
"25.2"
]
]
},
{
"name": "pydantic",
"specs": [
[
"==",
"2.11.7"
]
]
},
{
"name": "pydantic-core",
"specs": [
[
"==",
"2.33.2"
]
]
},
{
"name": "pygments",
"specs": [
[
"==",
"2.19.2"
]
]
},
{
"name": "rich",
"specs": [
[
"==",
"14.1.0"
]
]
},
{
"name": "setuptools",
"specs": [
[
"==",
"80.9.0"
]
]
},
{
"name": "shellingham",
"specs": [
[
"==",
"1.5.4"
]
]
},
{
"name": "smmap",
"specs": [
[
"==",
"5.0.2"
]
]
},
{
"name": "sniffio",
"specs": [
[
"==",
"1.3.1"
]
]
},
{
"name": "tqdm",
"specs": [
[
"==",
"4.67.1"
]
]
},
{
"name": "typer",
"specs": [
[
"==",
"0.16.0"
]
]
},
{
"name": "typing-extensions",
"specs": [
[
"==",
"4.14.1"
]
]
},
{
"name": "typing-inspection",
"specs": [
[
"==",
"0.4.1"
]
]
}
],
"lcname": "ai-git-utils"
}