生成 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 的提交消息生成器。
以上是GenAI Git 提交的详细内容。更多信息请关注PHP中文网其他相关文章!