Das Generieren einer Git-Commit-Nachricht ist schnell zu einer klassischen GenAI-Anwendung für Entwickler geworden.
Um dabei zu helfen, erstellen wir ein GenAIScript-Skript.
Das Skript fungiert als reguläres Node.js-Automatisierungsskript und verwendet runPrompt
um Aufrufe an das LLM zu senden und den Benutzer aufzufordern, den generierten Text zu bestätigen.
Das Skript beginnt mit dem Importieren der erforderlichen Funktionen aus @inquirer/prompts:
import { select, input, confirm } from "@inquirer/prompts"
Diese Funktionen werden verwendet, um mit dem Benutzer zu interagieren und ihn aufzufordern, Aktionen zu bestätigen oder Daten einzugeben.
Als nächstes prüfen wir, ob es irgendwelche gestaffelten Änderungen im Git-Repository gibt:
let { stdout } = await host.exec("git", ["diff", "--cached"])
Wenn keine Änderungen bereitgestellt werden, fragen wir den Benutzer, ob er alle Änderungen bereitstellen möchte. Wenn der Benutzer bestätigt, stellen wir alle Änderungen bereit. Ansonsten steigen wir aus.
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")
Wir generieren eine erste Commit-Nachricht mit den bereitgestellten Änderungen:
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
Die obige Eingabeaufforderungskonfiguration gibt an, dass die Nachricht prägnant sein sollte,
bezieht sich auf die Ausgabe „git diff --cached“ und sollte keine Anführungszeichen enthalten.
Der Benutzer wählt aus, wie mit der generierten Nachricht fortgefahren werden soll:
choice = await select({ message, choices: [ { name: "commit", value: "commit", description: "accept message and commit" }, ... ], })
Es stehen Optionen zum Bearbeiten oder Neugenerieren der Nachricht zur Verfügung. Wenn der Benutzer die Nachricht bearbeiten möchte, bitten wir ihn, eine neue Nachricht einzugeben:
if (choice === "edit") { message = await input({ message: "Edit commit message", required: true, }) choice = "commit" }
Wenn der Benutzer die Nachricht festschreiben möchte, übernehmen wir die Änderungen:
if (choice === "commit" && message) { console.log((await host.exec("git", ["commit", "-m", message])).stdout) }
Sie können dieses Skript mit der CLI ausführen.
genaiscript run gcm
Da es das Paket @inquirer/prompts verwendet, müssen Sie dieses Paket zuerst installieren:
npm install --save-dev @inquirer/prompts
Wenn Sie npx verwenden,
npx -p @inquirer/prompts genaiscript -p genaiscript -- genaiscript run gcm
Dieser Befehl führt das Skript aus und führt Sie durch den Prozess des Generierens und Festschreibens einer Git-Nachricht mithilfe von KI, wodurch Ihre Festschreibungen informativer und konsistenter werden.
Sie können diesen Befehl in eine gcm.sh-Datei oder in Ihren Paketskriptabschnitt in package.json einschließen:
{ "devDependencies": { "@inquirer/prompts": "...", "genaiscript": "..." }, "scripts": { "gcm": "genaiscript run gcm" } }
Dann können Sie das Skript ausführen mit:
npm run gcm
Dieses Skript wurde vom Commit-Nachrichtengenerator von Karpathy inspiriert.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3