Logo

dev-resources.site

for different kinds of informations.

使用 AI 自動生成 Git Commit 訊息

Published at
11/30/2024
Categories
openai
git
commit
api
Author
letswrite
Categories
4 categories in total
openai
open
git
open
commit
open
api
open
Author
9 person written this
letswrite
open
使用 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,就都可以填。

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

commit Article's
30 articles in total
Favicon
Why I Built commit-ai: A Story About Git Security and Team Safety
Favicon
使用 AI 自動生成 Git Commit 訊息
Favicon
# How to write good commit messages
Favicon
Conventional Git Commits With Best Practices.
Favicon
Understanding Git Rebase Merge: Chronological vs Logical Order and Commit History
Favicon
Improving Commit Message Quality in VSCode with Copilot
Favicon
TIL how to see the entire commit column on GitLab using JS
Favicon
Why Going Back in Git Doesn't Have to Be Scary
Favicon
🤖 Use AI to speed up writing commit messages (bonus: custom prompt for improved generation)
Favicon
How to commit
Favicon
Commits Semânticos: Organizando o Caos com Padrões de Mensagens
Favicon
Consequences of for-Git-ting to merge the master into feature branch!
Favicon
Git: Commit Messages
Favicon
Yazılım Projelerinde Düzen ve Verimlilik İçin: Conventional Commits Nedir?
Favicon
Good commit message V/S Bad commit message 🦾
Favicon
วิธี sign commit ด้วย GPG บน GitHub
Favicon
Git Together: Pro Tips for Commits and Branches
Favicon
Commit vs. Rollback: Database Transaction Essentials
Favicon
Sign Git Commits and Authenticate to GitHub with SSH Keys
Favicon
Developers Hate This One Weird Trick To Be Improve Their Craft
Favicon
Conventional Commits
Favicon
Cara memperbaiki commit git yang terlanjur commited
Favicon
Multiple SSH id
Favicon
💻 Semantic Commits
Favicon
Client side Git hooks 101
Favicon
How to write GIT commit messages
Favicon
The Power of Conventional Commits ✨✨
Favicon
What I've Learned About Git from Senior Colleagues (Part 2 - thoughful commit)
Favicon
GitHub Commits Color Scheme: Lets commit to commit.
Favicon
How do I make a Git commit in the past?

Featured ones: