產生 git 提交訊息很快就成為開發人員的經典 GenAI 應用程式。
為了解決這個問題,我們將製作一個 GenAIScript 腳本。
此腳本可作為常規 Node.js 自動化腳本並使用 runPrompt
向 LLM 發出呼叫並要求使用者確認產生的文字。
腳本首先從 @inquirer/prompts 匯入必要的函數:
import { select, input, confirm } from "@inquirer/prompts"
這些函數將用於與使用者交互,要求他們確認操作或輸入資料。
接下來,我們檢查 Git 儲存庫中是否有任何暫存的變更:
let { stdout } = await host.exec("git", ["diff", "--cached"])
如果沒有暫存任何更改,我們會詢問使用者是否要暫存所有更改。如果使用者確認,我們將暫存所有變更。否則,我們就退出。
const stage = await confirm({ message: "No staged changes. Stage all changes?", default: true, }) if (stage) { await host.exec("git", ["add", "."]) stdout = (await host.exec("git", ["diff", "--cached"])).stdout } if (!stdout) cancel("no staged changes")
我們使用分階段變更產生初始提交訊息:
message = ( await runPrompt( (_) => { _.def("GIT_DIFF", stdout, { maxTokens: 20000 }) _.$`GIT_DIFF is a diff of all staged changes, coming from the command: \`\`\` git diff --cached \`\`\` Please generate a concise, one-line commit message for these changes. - do NOT add quotes` }, { cache: false, temperature: 0.8 } ) ).text
上面的提示配置表示訊息要簡潔,
與“git diff --cached”輸出相關,且不應包含引號。
使用者選擇如何繼續處理產生的訊息:
choice = await select({ message, choices: [ { name: "commit", value: "commit", description: "accept message and commit" }, ... ], })
提供編輯或重新產生訊息的選項。如果使用者選擇編輯訊息,我們會要求他們輸入一條新訊息:
if (choice === "edit") { message = await input({ message: "Edit commit message", required: true, }) choice = "commit" }
如果使用者選擇提交訊息,我們將提交更改:
if (choice === "commit" && message) { console.log((await host.exec("git", ["commit", "-m", message])).stdout) }
您可以使用 CLI 來執行此腳本。
genaiscript run gcm
由於它使用@inquirer/prompts包,因此您需要先安裝此套件:
npm install --save-dev @inquirer/prompts
如果您使用 npx,
npx -p @inquirer/prompts genaiscript -p genaiscript -- genaiscript run gcm
此命令將運行腳本,並引導您完成使用 AI 產生和提交 Git 訊息的過程,使您的提交內容更加豐富且一致。
您可以將此指令包裝在 gcm.sh 檔案中或 package.json 中的套件腳本部分中:
{ "devDependencies": { "@inquirer/prompts": "...", "genaiscript": "..." }, "scripts": { "gcm": "genaiscript run gcm" } }
然後您可以使用以下命令運行腳本:
npm run gcm
這個腳本的靈感來自 Karpathy 的提交訊息產生器。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3