«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > GenAI Git-коммиты

GenAI Git-коммиты

Опубликовано 12 сентября 2024 г.
Просматривать:895

GenAI Git Commits

Создание сообщения о фиксации 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

Эта команда запустит скрипт и проведет вас через процесс создания и фиксации сообщения Git с использованием искусственного интеллекта, что сделает ваши коммиты более информативными и последовательными.

Вы можете обернуть эту команду в файл gcm.sh или в раздел сценария вашего пакета в package.json:

{
    "devDependencies": {
        "@inquirer/prompts": "...",
        "genaiscript": "..."
    },
    "scripts": {
        "gcm": "genaiscript run gcm"
    }
}

Затем вы можете запустить скрипт, используя:

npm run gcm

Благодарности

Этот скрипт был вдохновлен генератором сообщений о коммитах Karpathy.

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/pelikho/genai-git-commits-38m5?1. В случае каких-либо нарушений, пожалуйста, свяжитесь с [email protected], чтобы удалить ее.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3