"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > GenAI Git 커밋

GenAI Git 커밋

2024-09-12에 게시됨
검색:964

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

이 명령은 스크립트를 실행하고 AI를 사용하여 Git 메시지를 생성하고 커밋하는 프로세스를 안내하여 커밋을 더욱 유익하고 일관되게 만듭니다.

이 명령을 gcm.sh 파일이나 package.json의 패키지 스크립트 섹션에 래핑할 수 있습니다.

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

그런 다음 다음을 사용하여 스크립트를 실행할 수 있습니다.

npm run gcm

감사의 말

이 스크립트는 Karpathy의 커밋 메시지 생성기에서 영감을 받았습니다.

릴리스 선언문 이 글은 https://dev.to/pelikhan/genai-git-commits-38m5?1 에서 복제되었습니다. 침해 내용이 있는 경우, [email protected]으로 연락하여 삭제하시기 바랍니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3