„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > GenAI-Git-Commits

GenAI-Git-Commits

Veröffentlicht am 12.09.2024
Durchsuche:268

GenAI Git Commits

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.

? Erklärung des Skripts

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)
    }

? Ausführen des Skripts

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

Danksagungen

Dieses Skript wurde vom Commit-Nachrichtengenerator von Karpathy inspiriert.

Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/pelikhan/genai-git-commits-38m5?1 Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen
Neuestes Tutorial Mehr>

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