
git-zhou: AI 驱动的一键提交
使用 AI 自动生成符合 Conventional Commits 规范的提交信息,并提供交互式确认/重试/手动编辑。脚本文件为 commit.py
,适用于 macOS。
脚本文件commit.py
已内置一个gemini key,不保证何时实效
1 | #!/usr/bin/env python3 |
依赖与环境
- 需要已安装
git
。 - 使用指定 Python 解释器:
/opt/miniconda3/envs/zhouzhou/bin/python
- 安装依赖:
/opt/miniconda3/envs/zhouzhou/bin/python -m pip install requests
- 配置(按需):
OPENAI_API_BASE
:OpenAI 兼容接口的基础地址,形如https://your.domain/v1
。OPENAI_API_KEY
:若你的服务需要鉴权,请设置该值。- 文件内默认模型为
gemini-2.0-flash
,可按需调整。 - 说明:脚本会优先读取环境变量
OPENAI_API_BASE
/OPENAI_API_KEY
;若未设置,则使用commit.py
文件中的默认值。你也可以直接编辑commit.py
修改默认配置(不推荐硬编码敏感密钥)。优先级:环境变量 > 文件默认。
快速接入
以下三种方式任选其一。
方式 A:Git 子命令别名(推荐)
将脚本绑定为 git zhou
:
1 | git config --global alias.zhou '!/opt/miniconda3/envs/zhouzhou/bin/python /Users/zhouzhou/Desktop/test/warp/commit.py' |
用法:在任意 Git 仓库目录中执行:
1 | git zhou |
不想使用时如何移除(取消别名):
1 | # 全局配置移除(如果按上述命令设置过) |
方式 B:独立命令 git-zhou
在你的 ~/.zshrc
增加别名:
1 | alias git-zhou='/opt/miniconda3/envs/zhouzhou/bin/python /Users/zhouzhou/Desktop/test/warp/commit.py' |
用法:
1 | git-zhou |
不想使用时如何移除(取消别名):
1 | # 仅在当前终端会话临时取消 |
方式 C:加入 PATH(可执行方式)
1 | chmod +x /Users/zhouzhou/Desktop/test/warp/commit.py |
随后:
1 | git-zhou |
不想使用时如何移除(PATH 方式):
1 | # 删除放入 ~/bin 的脚本/链接 |
若
commit.py
使用 Python 运行,请在 shebang 或调用时仍显式使用:/opt/miniconda3/envs/zhouzhou/bin/python
。
提示:可以同时设置多个指令名(例如 git ai
、git cm
、git zhou
),详见下文“多指令名使用”。
使用说明
- 执行后脚本会:
- 自动
git add -A
(包含暂存、未暂存与未跟踪文件)。 - 基于
git diff --staged
生成 AI 提交信息。 - 显示交互菜单:
y
确认提交r
重新生成e
手动编辑q
取消
- 自动
- 若取消提交,你的改动仍留在暂存区(如需撤销可运行
git reset
)。- 提交成功后:若当前分支已配置上游(tracking)分支,将自动
git push
;若未配置或推送失败,则跳过推送但保留本地提交。
- 提交成功后:若当前分支已配置上游(tracking)分支,将自动
提示:未配置上游分支时可手动设置一次,例如:
1 | git push -u origin $(git rev-parse --abbrev-ref HEAD) |
可选环境变量
OPENAI_API_BASE
:兼容 OpenAI 的chat/completions
接口基础地址。OPENAI_API_KEY
:鉴权所需 Token。MODEL_NAME
、MAX_TOKENS
、TEMPERATURE
可在commit.py
中调整。- 优先级:环境变量会覆盖
commit.py
中的默认值。
- 优先级:环境变量会覆盖
故障排查
- AI 生成失败:选择
r
重试或e
手输提交信息。 - 网络/鉴权问题:确认
OPENAI_API_BASE
与OPENAI_API_KEY
设置正确。 - GPG/Hook:脚本遵循你仓库现有配置,如需签名请保持 Git 全局/本地设置不变。
进阶:从标准输入提供 diff(可选)
1 | git diff --staged | /opt/miniconda3/envs/zhouzhou/bin/python /Users/zhouzhou/Desktop/test/warp/commit.py |
当从标准输入传入内容时,脚本会优先使用该 diff。
文件位置:/Users/zhouzhou/Desktop/test/warp/commit.py
建议将上述命令中路径替换为你本机的实际路径。
配置:是否自动推送到远程
脚本内提供开关控制提交后是否自动 git push
:
-
在
commit.py
顶部(配置区)修改:PUSH_TO_REMOTE = True
开启自动推送(默认)PUSH_TO_REMOTE = False
关闭自动推送
-
也可以使用环境变量覆盖(不改代码):
- 开启:
export GIT_ZHOU_PUSH=true
(接受 1/true/yes/on) - 关闭:
export GIT_ZHOU_PUSH=false
(接受 0/false/no/off)
- 开启:
当关闭自动推送时,脚本会在本地完成提交并打印“已配置为不自动推送,跳过推送。”
多指令名使用(给他人或自己多入口)
你可以同时配置多个不同名称来调用同一个脚本,适合团队或个人多习惯共存。
方式 1:多个 Git 别名
1 | git config --global alias.ai '!/opt/miniconda3/envs/zhouzhou/bin/python /Users/zhouzhou/Desktop/test/warp/commit.py' |
移除时分别执行对应的 unset:
1 | git config --global --unset alias.ai |
方式 2:Git 外部子命令(git-)
将脚本链接为多个 git-<name>
可执行文件(在 PATH 中):
1 | ln -sf /Users/zhouzhou/Desktop/test/warp/commit.py ~/bin/git-ai |
移除:
1 | rm -f ~/bin/git-ai ~/bin/git-cm |
方式 3:Shell 别名(非 git 前缀)
1 | echo "alias ai='/opt/miniconda3/envs/zhouzhou/bin/python /Users/zhouzhou/Desktop/test/warp/commit.py'" >> ~/.zshrc |
移除(示例):
1 | unalias ai cm 2>/dev/null || true |
提示:当同名 Git 别名与外部子命令同时存在时,Git 优先使用别名定义。
Windows 使用说明
可在 Windows 上使用本脚本(支持 Git for Windows、PowerShell、CMD)。
依赖安装
- 安装 Python(建议 3.9+)。
- 安装依赖(任选其一):
- PowerShell/CMD:
py -m pip install requests
- PowerShell/CMD:
环境变量(可选)
如果不想改动 commit.py
内的配置,或需要在不同机器/会话中灵活注入配置,建议使用环境变量。脚本会优先读取这些变量;若未设置则落回到 commit.py
的默认值。否则可跳过本节。
- 临时设置(当前会话):
- PowerShell:
$env:OPENAI_API_BASE = 'https://your.domain/v1'
$env:OPENAI_API_KEY = 'your_key'
$env:GIT_ZHOU_PUSH = 'true'
# 或 false
- CMD:
set OPENAI_API_BASE=https://your.domain/v1
set OPENAI_API_KEY=your_key
set GIT_ZHOU_PUSH=true
- PowerShell:
- 永久设置(用户级):
- PowerShell/CMD:
[Environment]::SetEnvironmentVariable('OPENAI_API_BASE','https://your.domain/v1','User')
[Environment]::SetEnvironmentVariable('OPENAI_API_KEY','your_key','User')
[Environment]::SetEnvironmentVariable('GIT_ZHOU_PUSH','true','User')
- PowerShell/CMD:
快速接入方式(三选一)
-
Git 别名:
- 在 Git Bash 或 PowerShell 中:
git config --global alias.zhou '!"C:/Path/To/python.exe" "C:/Path/To/commit.py"'
- 使用:
git zhou
- 在 Git Bash 或 PowerShell 中:
-
外部子命令(推荐,便于多名称):
- 新建
%USERPROFILE%\bin
并加入 PATH。 - 新建文件
%USERPROFILE%\bin\git-zhou.cmd
,内容:@echo off
"C:\\Path\\To\\python.exe" "C:\\Path\\To\\commit.py" %*
- 之后可用:
git zhou
(Git 会调用git-zhou.cmd
)。
- 新建
-
PowerShell 函数(当前会话):
function git-zhou { & 'C:\\Path\\To\\python.exe' 'C:\\Path\\To\\commit.py' @args }
- 使用:
git-zhou
- 永久生效:将上述函数写入
$PROFILE
。
说明与排错
- Git 外部子命令在 Windows 上支持
.exe/.cmd/.bat
,建议用.cmd
包装器。 - 若中文显示异常,可在 PowerShell 里使用 UTF-8 终端;脚本已在 Windows 下切换至 UTF-8 控制台编码。
- 若自动推送失败,先执行一次:
git push -u origin <当前分支>
设置上游分支。
Windows 多指令名使用
可以像 macOS 一样同时配置多个名称来调用同一脚本。
-
多个 Git 别名:
1
2
3
4
5
6
7
8
9
10
11git config --global alias.ai '!"C:/Path/To/python.exe" "C:/Path/To/commit.py"'
git config --global alias.cm '!"C:/Path/To/python.exe" "C:/Path/To/commit.py"'
# 使用
git ai
git cm
git zhou
# 移除
git config --global --unset alias.ai
git config --global --unset alias.cm -
多个外部子命令(推荐):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16mkdir %USERPROFILE%\bin 2>nul
# git-ai.cmd
echo @echo off> %USERPROFILE%\bin\git-ai.cmd
echo "C:\\Path\\To\\python.exe" "C:\\Path\\To\\commit.py" %%*>> %USERPROFILE%\bin\git-ai.cmd
# git-cm.cmd
echo @echo off> %USERPROFILE%\bin\git-cm.cmd
echo "C:\\Path\\To\\python.exe" "C:\\Path\\To\\commit.py" %%*>> %USERPROFILE%\bin\git-cm.cmd
# 确保将 %USERPROFILE%\bin 加入 PATH 后,直接可用:
git ai
git cm
# 移除
del %USERPROFILE%\bin\git-ai.cmd 2>nul
del %USERPROFILE%\bin\git-cm.cmd 2>nul -
PowerShell 额外命令名(非 git 前缀):
1
2
3function ai { & 'C:\\Path\\To\\python.exe' 'C:\\Path\\To\\commit.py' @args }
function cm { & 'C:\\Path\\To\\python.exe' 'C:\\Path\\To\\commit.py' @args }
# 写入 $PROFILE 可持久化