在git commit时利用AI自动生成并填充commit信息
文章目录
- 前言
- 一、实现思路
- 二、具体实现
-
- 1.获取修改的代码内容
- 2.提交给AI,并从AI得到结果
- 3.信息写入到git commit的编辑框
- 效果
- 使用
- 总结
前言
提交代码时都会用到git commit,这时一般会根据修改的代码来写上说明信息,在工作中,公司也往往会对commit的信息有严格的格式要求。
那么我们考虑做一款工具,在使用git commit时,在弹出的编辑框中,利用AI来分析修改的代码,自动生成并填充符合格式要求的commit信息,之后我们只需要wq便能够完成提交。
借助该工具,可以快速生成关于修改代码的一个较为全面的总结信息,避免程序员因为“偷懒”而随便填写commit信息。
一、实现思路
实现主要分为3个部分:
1、git commit时,获取修改的代码内容。
2、提交给AI,并从AI那里得到结果。
3、写入到git commit的编辑框。
这里实现的前提条件是公司已经有内部的AI模型可使用,这样将代码提给AI是没有风险的。注意不要将代码提给外部AI,存在信息安全问题。
二、具体实现
1.获取修改的代码内容
git提供了hook机制,即在使用git的时候能够调用一些我们的实现。这里我们修改了.git\hooks\prepare-commit-msg文件,prepare-commit-msg文件是本已存在的,在执行git commit的时候,会执行prepare-commit-msg脚本。
#!/bin/sh# 获取 commit message 文件
COMMIT_MSG_FILE="$1"python .git/hooks/ai_commit.py "$COMMIT_MSG_FILE"exit 0
这个脚本也很简单,就是执行一个python脚本,我们的主要逻辑都放在这个py中实现。
这里是在git commit时就会使用该python脚本,如果我们想要做一些区分,如用户可以选择用一般的git commit自己填写还是用AI生成信息,则这里可以加一些if条件来处理。
ai_commit.py
import sys
import os
import subprocess
from openai import OpenAIdef get_git_diff():"""get the diff of staged"""try:diff = subprocess.check_output(["git", "diff", "--cached"],text=True,encoding="utf-8",errors="ignore")print("[DEBUG] git diff --cached get success", file=sys.stderr)return diffexcept subprocess.CalledProcessError:print(