文章目錄
- 前言
- 一、實現思路
- 二、具體實現
- 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 OpenAI
def 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 diff
except subprocess.CalledProcessError:
print(