Gerar uma mensagem de commit do git rapidamente se tornou um aplicativo GenAI clássico para desenvolvedores.
Para ajudar com isso, criaremos um script GenAIScript.
O script atua como um script de automação node.js normal e usa runPrompt
para emitir chamadas para o LLM e solicitar ao usuário a confirmação do texto gerado.
O script começa importando as funções necessárias de @inquirer/prompts:
import { select, input, confirm } from "@inquirer/prompts"
Essas funções serão utilizadas para interagir com o usuário, solicitando que ele confirme ações ou insira dados.
Em seguida, verificamos se há alguma alteração preparada no repositório Git:
let { stdout } = await host.exec("git", ["diff", "--cached"])
Se nenhuma alteração for testada, perguntamos ao usuário se ele deseja testar todas as alterações. Se o usuário confirmar, preparamos todas as alterações. Caso contrário, nós resgatamos.
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")
Geramos uma mensagem de commit inicial usando as alterações preparadas:
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
A configuração do prompt acima indica que a mensagem deve ser concisa,
relacionado à saída "git diff --cached" e não deve incluir aspas.
O usuário escolhe como proceder com a mensagem gerada:
choice = await select({ message, choices: [ { name: "commit", value: "commit", description: "accept message and commit" }, ... ], })
São fornecidas opções para editar ou regenerar a mensagem. Se o usuário optar por editar a mensagem, pedimos que ele insira uma nova mensagem:
if (choice === "edit") { message = await input({ message: "Edit commit message", required: true, }) choice = "commit" }
Se o usuário optar por enviar a mensagem, nós confirmamos as alterações:
if (choice === "commit" && message) { console.log((await host.exec("git", ["commit", "-m", message])).stdout) }
Você pode executar este script usando a CLI.
genaiscript run gcm
Como ele usa o pacote @inquirer/prompts, você precisará instalar este pacote primeiro:
npm install --save-dev @inquirer/prompts
Se você estiver usando npx,
npx -p @inquirer/prompts genaiscript -p genaiscript -- genaiscript run gcm
Este comando executará o script e guiará você através do processo de geração e commit de uma mensagem Git usando IA, tornando seus commits mais informativos e consistentes.
Você pode agrupar este comando em um arquivo gcm.sh ou na seção de script do pacote em package.json:
{ "devDependencies": { "@inquirer/prompts": "...", "genaiscript": "..." }, "scripts": { "gcm": "genaiscript run gcm" } }
Então você pode executar o script usando:
npm run gcm
Este script foi inspirado no gerador de mensagens de commit do Karpathy.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3