ai-git-utils


Nameai-git-utils JSON
Version 0.4.1 PyPI version JSON
download
home_pageNone
SummaryAI git utils is an intelligent Git commit assistant that leverages AI to enhance your Git workflow.
upload_time2025-08-08 01:41:28
maintainerNone
docs_urlNone
authorNone
requires_python>=3.11
licenseNone
keywords ai aigit git
VCS
bugtrack_url
requirements annotated-types anyio certifi click distro gitdb gitpython h11 httpcore httpx idna jiter markdown-it-py mdurl openai pip pydantic pydantic-core pygments rich setuptools shellingham smmap sniffio tqdm typer typing-extensions typing-inspection
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # AI Git Utils: 智能 Git Commit 助手 🚀

[![PyPI version](https://badge.fury.io/py/ai-git-utils.svg)](https://badge.fury.io/py/ai-git-utils)

**AI Git Utils** 是一个利用 AI 技术增强您 Git 工作流程的智能化工具。它能够根据您的代码变更自动生成规范、清晰且富有表现力的 Commit Message,并智能推荐相关的 Emoji,显著提升版本控制的效率和体验。

![screen](https://raw.githubusercontent.com/twn39/aigit/main/screen.png)

---

## ✨ 核心特性

- **🤖 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[![PyPI version](https://badge.fury.io/py/ai-git-utils.svg)](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![screen](https://raw.githubusercontent.com/twn39/aigit/main/screen.png)\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"
}
        
Elapsed time: 1.73604s