본문으로 건너뛰기

© 2026 Molayo

GitHub요약2026. 05. 14. 13:19

renatogalera/ai-commit

요약

AI-Commit은 AI를 활용하여 Git 워크플로우를 간소화하는 도구로, Conventional Commits 준수 메시지 생성, 스테이징된 diff에 대한 AI 코드 리뷰, 그리고 커밋 메시지 스타일 검토 기능을 제공합니다. OpenAI, Google Gemini, Anthropic Claude 등 다양한 LLM 프로바이더를 지원하며, 대화형 TUI와 비대화형 모드를 통해 개발자가 일관되고 고품질의 커밋을 쉽게 만들도록 돕습니다. 이 도구는 Git 훅 통합, 변경 로그 생성, 티켓 ID 자동 감지 등의 고급 기능을 포함하여 전체적인 버전 관리 프로세스를 개선합니다.

핵심 포인트

  • Conventional Commits를 준수하는 AI 기반 커밋 메시지 생성이 가능합니다.
  • 스테이징된 코드 차이점(diff)에 대해 스타일 및 리스크 확인을 포함한 AI 코드 리뷰가 실행됩니다.
  • OpenAI, Google Gemini, Anthropic Claude 등 다양한 LLM 프로바이더와 로컬 모델(Ollama)을 지원합니다.
  • 대화형 TUI를 통해 커밋 메시지 수정, diff 보기 등이 용이하며, 스크립트/CI 환경을 위한 비대화형 모드도 제공됩니다.
  • Git 훅 통합 및 티켓 ID 자동 감지 등 고급 기능을 통해 전체적인 버전 관리 프로세스를 지원합니다.

AI-Commit AI-Commit은 중요한 세 가지 핵심 작업에 집중하여 AI로 Git 워크플로우를 간소화합니다.

  • Conventional Commits를 준수하는 메시지 생성
  • 스테이징된 diff(차이점)에 대한 빠른 AI 코드 리뷰 (AI code review) 실행
  • 커밋 메시지 스타일 검토/강제 (명확성, 정보성, 일관성)

다음과 같은 다양한 프로바이더 (providers)를 지원합니다:

OpenAI (기본값)
Google Gemini
Anthropic Claude
DeepSeek
Ollama (로컬 모델)
OpenRouter (멀티 모델 게이트웨이)

터미널에서 바로 더 나은 커밋, 일관된 표준, 그리고 줄어든 수고에 집중하세요.

Repository: https://github.com/renatogalera/ai-commit

이 스크립트는 OS/아키텍처를 감지하고, 최신 릴리스를 다운로드하며, 실행 가능하게 만든 뒤 /usr/local/bin에 설치합니다 (필요 시 sudo 사용).

curl -sL https://raw.githubusercontent.com/renatogalera/ai-commit/main/scripts/install_ai_commit.sh | bash

루트(root) 권한이 아닌 경우, 바이너리를 이동하기 위해 sudo를 요청할 것입니다.

git clone https://github.com/renatogalera/ai-commit.git
cd ai-commit
go build -o ai-commit ./cmd/ai-commit
...
  • Conventional Commits를 따르는 AI 기반 커밋 메시지
  • 스테이징된 diff에 대한 AI 코드 리뷰 (AI code review) (ai-commit review): 스타일, 리팩토링 힌트, 간단한 리스크 확인
  • 명확성과 품질을 강제하기 위한 커밋 메시지 스타일 검토 (--review-message)
  • 메시지 수정, 타입 전환, 전체 diff 보기, 그리고 (지원되는 경우) AI 출력을 스트리밍할 수 있는 대화형 TUI (Interactive TUI)
  • 스크립트/CI를 위한 비대화형 모드 (Non-interactive mode) (--force)
  • 시맨틱 릴리스 지원 (Semantic release assist) (--semantic-release, 선택 사항으로 --manual-semver 사용 가능)
  • 청크(chunk) 선택/반전 기능을 갖춘 대화형 분할 커밋 (Interactive split commits) (--interactive-split)
  • 커밋 타입에 매핑된 이모지 지원 (Emoji support) (--emoji)
  • 커스텀 템플릿 (Custom templates) (--template) 및 설정 내 프롬프트 템플릿 (promptTemplate)
  • 태그 또는 시간 범위 사이의 변경 로그 생성 (Changelog generation) (ai-commit changelog)
  • {TICKET_ID} 템플릿 플레이스홀더를 통한 브랜치 이름에서의 티켓 자동 감지 (Ticket auto-detection) (JIRA, GitHub, Linear)
  • Git 훅 통합 (Git hook integration) (ai-commit hook install)

) 자동 커밋 메시지 생성을 위한 기능.

  • 범위 자동 제안 (Scope auto-suggestion): 변경된 파일 경로로부터 AI를 가이드하기 위해 사용.
  • Diff/프롬프트 제한 (Diff/prompt limits): 페이로드(payload) 크기를 제한하기 위해 사용.
  • Lock 파일 필터링 (Lock file filtering): 더 깨끗한 AI 컨텍스트를 위해 사용.

처음 실행 시, AI-Commit은 다음을 생성합니다:

~/.config/ai-commit/config.yaml

경로는 바이너리 이름에서 유도됩니다. 바이너리 이름을 변경하면 폴더 이름도 새 이름과 일치하게 됩니다.

authorName: "Your Name"
authorEmail: "youremail@example.com"
provider: "openai" # CLI 플래그가 주어지지 않을 경우 기본 제공자(default provider)
...

참고 사항

  • 커맨드 라인 플래그(Command-line flags)가 설정(config) 값을 덮어씁니다.
  • authorNameauthorEmailCommitChanges에 의해 git 작성자로 사용됩니다. 이를 본인의 정보로 설정하십시오 (이 도구는 사용자의 git 설정을 읽지 않습니다).
  • promptTemplate은 메시지 생성, 코드 리뷰 및 스타일 체크를 위한 프롬프트에 영향을 미칩니다.
  • limits.diff/prompt는 제공자(provider)에게 보내기 전에 절단(truncation) 또는 요약(summarization)을 허용합니다.

각 제공자에 대해 코드는 다음을 관찰합니다:

${PROVIDER}_API_KEY (예: OPENAI_API_KEY, GOOGLE_API_KEY, ANTHROPIC_API_KEY, DEEPSEEK_API_KEY, OPENROUTER_API_KEY)
${PROVIDER}_BASE_URL (예: OPENAI_BASE_URL, GOOGLE_BASE_URL, …, OLLAMA_BASE_URL)

변경 사항 스테이징 (Stage changes)

git add .

커밋 메시지 생성 (대화형/interactive)

ai-commit

TUI 키 바인딩 (TUI keybindings)

  • 커밋 확정: Enter 또는 y
  • 다시 생성: r (시도 횟수 제한 있음)
  • 커밋 타입 변경: t
  • 커밋 메시지 편집: e (Ctrl+s로 저장, Esc로 취소)
  • 추가 프롬프트 텍스트 편집: p (Ctrl+s로 저장, Esc로 취소)
  • 전체 Diff 보기: l (Esc 또는 q로 Diff 종료)
  • 도움말 토글: ?
  • 종료: q / Esc / Ctrl+C

스타일 리뷰 표시:

  • 선택된 제공자가 스트리밍(stream)을 지원하지 않는 경우, 스타일 리뷰 제안(--review-message가 활성화된 경우)이 TUI에 표시됩니다.
  • 스트리밍 제공자의 경우, 스타일 리뷰는 아직 TUI 내부에서 실시간으로 표시되지 않습니다.
ai-commit [flags]
ai-commit review
ai-commit summarize
...

--provider — 다음 중 하나:
openai, google, anthropic, deepseek, ollama

, openrouter`

--model

providers.<name>.model을 재정의(overrides)합니다.

--apiKey

providers.<name>.apiKey 또는 ${PROVIDER}_API_KEY를 재정의(overrides)합니다.

--baseURL

providers.<name>.baseURL 또는 ${PROVIDER}_BASE_URL을 재정의(overrides)합니다.

--language

— 프롬프트/응답에 사용할 언어 (기본값: english)

--commit-type

— Conventional Commit 타입을 강제합니다 (feat, fix, …)

--template

— 최종 메시지에 템플릿을 적용합니다 ({COMMIT_MESSAGE}, {GIT_BRANCH}, {TICKET_ID} 지원)

--review-message

— 생성된 커밋 메시지에 대해 AI 스타일 리뷰를 실행합니다

--msg-only

— 커밋 메시지를 생성하고 표준 출력(stdout)에 출력합니다 (git hooks에서 사용)

--force

— 비대화형(non-interactive) 모드; 스타일 피드백(있는 경우)을 출력한 후 즉시 커밋합니다

--semantic-release

— 최신 커밋으로부터 다음 버전을 계산하고 태그(tag)를 생성합니다

--manual-semver

--semantic-release와 함께 사용하며, TUI를 통해 버전을 선택합니다

--interactive-split

— 청크(chunk) 기반 분할 TUI를 엽니다

review

— 스테이징된 변경 사항에 대한 AI 코드 리뷰 (ai-commit review)

summarize

— 터미널 내 퍼지 파인더(fuzzy finder)를 통해 커밋을 선택하고 AI 요약을 생성합니다 (ai-commit summarize)

changelog

— 두 개의 참조(ref) 사이의 AI 기반 변경 로그(changelog)를 생성합니다
ai-commit changelog v0.10.0..v0.11.0
ai-commit changelog --since="2 weeks ago"
ai-commit changelog --output CHANGELOG.md
ai-commit changelog # 자동 감지: 마지막 두 개의 태그

hook install / hook uninstall

prepare-commit-msg git hook을 관리합니다
ai-commit hook install # hook 설치
ai-commit hook install --force # 기존 hook 덮어쓰기
ai-commit hook uninstall # hook 제거

“퍼지 파인더(fuzzy finder)”는 Go 라이브러리를 통해 내장되어 있어, 외부 fzf 바이너리가 필요하지 않습니다.

대화형, 영어, OpenAI

ai-commit --provider=openai --model=chatgpt-4o-latest --language=english

강제 커밋 + 스타일 리뷰 (비대화형)

ai-commit --force --review-message

스타일 리뷰를 포함한 대화형 (스트리밍을 지원하지 않는 제공자는 TUI에 피드백을 표시합니다)

ai-commit --provider=google --model=models/gemini-2.5-flash --review-message

환경 변수(env vars)를 통한 Anthropic 사용

export ANTHROPIC_API_KEY=sk-...
ai-commit --provider=anthropic --model=claude-3-7-sonnet-latest

명시적 Base URL을 사용한 DeepSeek

ai-commit --provider=deepseek --model=deepseek-chat --baseURL=https://api.deepseek.com/v1 --apiKey=sk-...

Ollama (로컬)

ai-commit --provider=ollama --model=llama2 --baseURL=http://localhost:11434

OpenRouter

ai-commit --provider=openrouter --model=openrouter/auto --apiKey=sk-...

대화형 분할 (Interactive split)

ai-commit --interactive-split

시맨틱 릴리스 (Semantic release, 수동 선택)

ai-commit --semantic-release --manual-semver

릴리스 간 변경 로그 (Changelog) 생성

ai-commit changelog v0.10.0..v0.11.0
ai-commit changelog --since="2 weeks ago" --output CHANGELOG.md

템플릿에서 브랜치의 티켓 ID (ticket ID) 사용

# config.yaml
template: "{COMMIT_MESSAGE}\n\nRefs: {TICKET_ID}"
# On branch feature/PROJ-456-add-login:
ai-commit
# Result: "feat(auth): add login\n\nRefs: PROJ-456"

Git 훅 (git hook)으로 설치

ai-commit hook install
# 이제 'git commit' 시 AI 메시지가 자동으로 생성됩니다.
제공자 (Provider)API 키 필요 여부기본 모델 (예시)Base URL (예시)코드 내 스트리밍 (Streaming)
OpenAIchatgpt-4o-latesthttps://api.openai.com/v1
Googlegemini-2.5-flash (기본값)아니요
Anthropicclaude-3-7-sonnet-latesthttps://api.anthropic.com
DeepSeekdeepseek-chathttps://api.deepseek.com/v1
OpenRouteropenrouter/autohttps://openrouter.ai/api/v1
Ollama아니요llama2http://localhost:11434아니요

환경 변수 (Env vars): ${PROVIDER}_API_KEY${PROVIDER}_BASE_URL (제공자 이름은 대문자 사용).

스트리밍 (Streaming): 제공자가 스트리밍을 구현한 경우, TUI는 진행 상태 펄스(progress pulse)를 보여주는 동안 완성된 토큰(completion tokens)을 스트리밍합니다.
Diff 보기 (Diff view): l을 누르세요.

TUI 내부에서 전체 Git diff를 검사합니다. 커밋 유형 추측 (Commit type guess): 강제하지 않을 경우, UI가 첫 번째 줄에서 유형을 추측하며 t를 눌러 재정의할 수 있습니다.

재생성 제한 (Regeneration limit): 실행당 연속 재생성 최대 횟수는 기본적으로 3회입니다 (UI 레이블 참조).

비대화형 (Non-interactive) (--force 옵션 사용 시): 커밋 전에 스타일이 적용된 피드백이 터미널에 출력됩니다. 문제가 발견되면 짧고 스타일이 적용된 블록을 출력하며, 문제가 없으면 아무것도 출력하지 않거나 “No issues found.”를 표시합니다.

대화형 (Interactive):
비스트리밍 제공자 (Non-streaming providers): 생성된 메시지와 함께 스타일이 적용된 피드백이 TUI에 나타납니다.
스트리밍 제공자 (Streaming providers): TUI 내부의 스타일 피드백은 아직 구현되지 않았습니다.

최종 AI 메시지를 템플릿으로 감쌀 수 있습니다. 예시:

template: |
{COMMIT_MESSAGE}
Branch: {GIT_BRANCH}
...

플레이스홀더 (Placeholders):

{COMMIT_MESSAGE} — AI가 생성한 (그리고 유형 접두사가 붙은) 메시지로 교체됩니다.
{GIT_BRANCH} — 실행 시점에 git을 통해 해결됩니다.
{TICKET_ID} — 브랜치 이름에서 자동으로 추출됩니다 (JIRA PROJ-123, GitHub #42/GH-42, Linear ENG-456 지원). configticketPattern을 통해 사용자 정의 정규 표현식을 설정할 수 있습니다.

락 파일 (Lock files): 노이즈를 줄이기 위해 lockFiles에 나열된 경로의 diff는 AI 프롬프트에서 제외됩니다.

제한 사항 (Limits):
limits.diff: 프롬프트에 전달하기 전에 diff를 자르거나 요약합니다.
limits.prompt: 최종 프롬프트 크기의 상한선을 설정합니다 (...으로 잘림).

빈 커밋 메시지 (Empty commit message): AI가 빈 문자열을 반환하면 도구가 중단되거나(비대화형) UI에 머무릅니다. 재생성을 시도하거나 diff를 검사하세요.

“API key required” 오류: --apiKey, ${PROVIDER}_API_KEY 환경 변수, 또는 비어 있지 않은 providers.<name>.apiKey가 설정되어 있는지 확인하세요.

Ollama 베이스 URL (Ollama base URL): 유효해야 합니다. 제공자로부터 연결 문제나 4xx 오류가 발생하는 경우, 엔드포인트와 헤더를 확인하세요 (특히 자체 호스팅 게이트웨이의 경우).

작성자 신원 (Author identity): 기본값으로 커밋되는 것을 방지하려면 config.yaml에서 authorName/authorEmail을 설정하세요.

  • AI-Commit은 귀하의 **diffs/prompts (차이점/프롬프트)**를 설정된 제공자(provider)에게 전송합니다. 귀하가 사용하는 제공자의 데이터 보관 및 개인정보 보호 정책을 검토하십시오. 매우 민감한 저장소(repo)의 경우, local (로컬) 제공자(예: Ollama)를 선호하거나 엄격한 제한을 설정하십시오.

MIT (프로젝트 차트에는 MIT로 명시되어 있습니다. 저장소의 LICENSE를 공개 발표 내용과 일치하게 유지하십시오).

  • ✅ 청크 선택/반전 기능이 포함된 Split-commit TUI
  • ✅ Fuzzy finder를 이용한 커밋 요약
  • ✅ AI 기반 변경 로그(changelog) 생성 (ai-commit changelog)
  • ✅ 브랜치 이름으로부터 티켓 자동 감지 ({TICKET_ID})
  • ✅ Git hook 통합 (ai-commit hook install)
  • ✅ 변경된 파일 경로로부터 스코프(scope) 자동 제안
  • ✅ 테스트 및 린팅(linting)이 포함된 CI 파이프라인
  • ✅ 포괄적인 테스트 스위트 (150개 이상의 테스트 케이스)
  • 🔜 스트리밍 제공자를 위한 In-TUI 스타일 리뷰

AI 자동 생성 콘텐츠

본 콘텐츠는 GitHub Claude Ecosystem의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0