DEV Community

Cover image for 使用 AI 自動生成 Git Commit 訊息
Let's Write
Let's Write

Posted on • Originally published at letswrite.tw

使用 AI 自動生成 Git Commit 訊息

使用 AI 自動生成 Git Commit 訊息

本篇要解決的問題

每次更新完成式碼,比如修 Bug、開發新功能後,在寫 Git Commit 訊息時都會很懶,基本上寫出的就是當下的自己看得懂,但未來的自己,或是接手的人不一定看得懂的狀態,導致之後要回頭查某次的更新時,會耗掉很長的時間在找哪次的更新是不是有改某某功能。

人類不想花心力的工作,就交給 AI 去作。

August 用了 OpenAI API,再用便宜的 gpt-4o-mini 模型後,Commit 訊息可以秒生成。

因為用的是 API,會需要付費使用,但 gpt-4o-mini 真的便宜,猛用一個月搞不好用不到 1 美金。

會看到這篇筆記文的,應該都是開發一段時間過的攻城獅大大們,所以才也想要省掉寫 Git Commit 的心力,這篇就不細寫了,因為方式很簡單,本篇不再贅述細節,僅附上相關文章連結供參考。


準備好必要東西:OpenAI API Key

因為是調用 OpenAI API 來幫我們寫提交訊息,因此需要 Key。

要再次提醒,使用 AI 來寫提交訊息,是要酷 $$ 的,只是選對模型,可以很省錢。

這個步驟前幾篇有寫過,就不再重寫,請看:

CodiumAI PR-Agent,在 GitLab 上用 AI 來 Code Review


準備好必要的東西:安裝 Node.js

這篇其實也可以跳過的,前端攻城獅的電腦,沒有安裝 Node.js 的可能性比搶到無敵星星還低。

這邊附上 Node.js 的官方網址,請自行下載安裝:https://nodejs.org/zh-tw

安裝後,可以用終端機執行以下,看是否安裝成功,有成功會回傳安裝的版本:

node -v
npm -v
Enter fullscreen mode Exit fullscreen mode

安裝必要的 packages

為了調用 OpenAI API,需要二個 package:axios、dotenv。

  • axios:用於處理 HTTP 請求,支援 Promise 和攔截器。
  • dotenv:用於從 .env 檔案載入環境變數,防止敏感資訊外洩。

看大家習慣用什麼工具安裝,這邊附上基本款的 npm install

npm install -D axios dotenv
Enter fullscreen mode Exit fullscreen mode

建立 .env 檔

.env 檔是拿來放 OpenAI API Key 用的,畢竟有了 Key,其他人就可以拿來用,為了保障我們 $$ 的生命安全,我們放進 .env 裡。

.env 檔內容如下:

OPEN_API_KEY_COMMIT=從 OpenAI 後台拿到的 Key
Enter fullscreen mode Exit fullscreen mode

.env 檔,除非專案是私人的,或是公司自架的 Git,不然要避免傳上去。


新增 commit.cjs 檔

這步驟,就是要寫調用 OpenAI API 來幫我們產生 commit 訊息的程式碼。

Prompt 的部份,是 August 試過幾次後,覺得有符合自己需求的寫法,如果大家發現有更好的 Prompt,歡迎留言提供。

commit.cjs 內容如下:

程式碼裡,有避開去檢查 .min. 的檔案。

如果需要再避開什麼,就修改 filter 的部份,比方如果要再避掉 docs 資料夾中的文件,可以改為:

.filter(file => file && !file.includes('.min.') && !file.startsWith('docs/') && file.trim() !== '');
Enter fullscreen mode Exit fullscreen mode

使用方式

我們編輯好程式碼,將要 commit 的檔案 用 git add stage 以後,專案裡開啟終端機,輸入:

node commit.cjs
Enter fullscreen mode Exit fullscreen mode

接著幾需要幾秒的時間(看檔案異動的多寡),就會看見 OpenAI 回傳了這次的 commit message。

會像這樣:

OpenAI 回傳的範例 Git commit 訊息,包含 Summary 和 Description。

會提供兩個項目:簡短的 Summary、條例式也較詳細的 Description。

主要是因為大家使用 Git 的工具都不一樣,同事用 Sourcetree 就只有 Summary 可以填,但 August 用的是 Fork,就都可以填。

二項都列出來,大家自由選擇囉。

Top comments (0)