Menjana mesej komit git dengan pantas menjadi aplikasi GenAI klasik untuk pembangun.
Untuk membantu perkara ini, kami akan mencipta skrip GenAIScript.
Skrip bertindak sebagai skrip automasi node.js biasa dan menggunakan runPrompt
untuk mengeluarkan panggilan kepada LLM dan meminta pengguna mengesahkan teks yang dijana.
Skrip bermula dengan mengimport fungsi yang diperlukan daripada @inquirer/prompts:
import { select, input, confirm } from "@inquirer/prompts"
Fungsi ini akan digunakan untuk berinteraksi dengan pengguna, meminta mereka mengesahkan tindakan atau memasukkan data.
Seterusnya, kami menyemak sama ada terdapat sebarang perubahan berperingkat dalam repositori Git:
let { stdout } = await host.exec("git", ["diff", "--cached"])
Jika tiada perubahan berperingkat, kami bertanya kepada pengguna jika mereka mahu melakukan semua perubahan. Jika pengguna mengesahkan, kami peringkat semua perubahan. Jika tidak, kami menyelamatkan diri.
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")
Kami menjana mesej komit awal menggunakan perubahan berperingkat:
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
Konfigurasi segera di atas menunjukkan bahawa mesej harus ringkas,
berkaitan dengan keluaran "git diff --cached" dan tidak harus menyertakan petikan.
Pengguna memilih cara untuk meneruskan dengan mesej yang dijana:
choice = await select({ message, choices: [ { name: "commit", value: "commit", description: "accept message and commit" }, ... ], })
Pilihan diberikan untuk mengedit atau menjana semula mesej. Jika pengguna memilih untuk mengedit mesej, kami meminta mereka memasukkan mesej baharu:
if (choice === "edit") { message = await input({ message: "Edit commit message", required: true, }) choice = "commit" }
Jika pengguna memilih untuk menghantar mesej, kami melakukan perubahan:
if (choice === "commit" && message) { console.log((await host.exec("git", ["commit", "-m", message])).stdout) }
Anda boleh menjalankan skrip ini menggunakan CLI.
genaiscript run gcm
Memandangkan ia menggunakan pakej @inquirer/prompts, anda perlu memasang pakej ini terlebih dahulu:
npm install --save-dev @inquirer/prompts
Jika anda menggunakan npx,
npx -p @inquirer/prompts genaiscript -p genaiscript -- genaiscript run gcm
Arahan ini akan menjalankan skrip dan membimbing anda melalui proses menjana dan melakukan mesej Git menggunakan AI, menjadikan komitmen anda lebih bermaklumat dan konsisten.
Anda boleh membungkus arahan ini dalam fail gcm.sh atau dalam bahagian skrip pakej anda dalam package.json:
{ "devDependencies": { "@inquirer/prompts": "...", "genaiscript": "..." }, "scripts": { "gcm": "genaiscript run gcm" } }
Kemudian anda boleh menjalankan skrip menggunakan:
npm run gcm
Skrip ini diilhamkan daripada penjana mesej komit Karpathy.
Atas ialah kandungan terperinci GenAI Git Commits. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!