OpenCommit을 이용해 Git 커밋 자동화 및 무료 로컬 LLM 연동 방법

반응형

OpenCommit: AI 기반 커밋 메시지 생성 도구

OpenCommit은 AI를 활용하여 의미 있는 커밋 메시지를 자동 생성하는 도구입니다. 이 도구는 개발자들이 커밋 메시지 작성에 드는 시간을 줄이고, 일관성 있는 커밋 메시지를 유지하는 데 도움을 줍니다.

opencommit의 모든 커밋은 opencommit으로 작성했다고 합니다. opencommit 커밋 살펴보기

 

설치

npm install -g opencommit

또는 npx opencommit 또는 bunx opencommit을 사용할 수도 있습니다.

 

Ollama 설정

OpenCommit은 기본적으로 OpenAI의 gpt-3.5-turbo 모델을 사용합니다. Ollama를 사용하려면 다음 명령어를 실행합니다.

oco config set OCO_AI_PROVIDER=ollama

Ollama 기본 모델은 mistral을 사용합니다. OpenCommit 코드에서 확인할 수 있습니다.

 

llama3 모델로 변경하려면 다음과 같이 입력합니다.

oco config set OCO_AI_PROVIDER=ollama/llama3

Ollama는 커밋 메시지에 특화된 모델도 제공합니다. 예를 들어 tavernari/git-commit-message 모델이 있습니다. 하지만 이 모델명에 /가 포함되어 있어 OpenCommit에서는 현재 사용할 수 없습니다. OpenCommit 코드의 이 부분이 수정되어야 사용 가능합니다.

 

OpenCommit 사용하기

스테이징된 변경 사항에 대한 커밋 메시지를 생성하려면 git commit 대신 opencommit 명령어를 실행합니다.

   git add <files...>
   opencommit

또는 oco 단축키를 사용할 수 있습니다.

   git add <files...>
   oco

 

llama3, phi3, aya, mistral 5개 모델로 테스트 결과 llama3의 커밋 메시지가 가장 좋았습니다. 하지만 성능을 확실하게 비교하여 확인하기 위해서는 더 많은 케이스로 테스트를 해봐야 할 것 같습니다.

 

OpenCommit 구성

OpenCommit 구성 파일 ~/.opencommit를 살펴보겠습니다.

OCO_OPENAI_API_KEY=undefined
OCO_OPENAI_MAX_TOKENS=undefined
OCO_OPENAI_BASE_PATH=undefined
OCO_DESCRIPTION=false
OCO_EMOJI=false
OCO_MODEL=phi3
OCO_LANGUAGE=en
OCO_MESSAGE_TEMPLATE_PLACEHOLDER=$msg
OCO_PROMPT_MODULE=conventional-commit
OCO_AI_PROVIDER=ollama
  • OCO_OPENAI_API_KEY: OpenAI API Key를 입력합니다. OpenAI API를 사용하지 않는다면 undefined 상태로 둡니다.
  • OCO_TOKENS_MAX_INPUT: 최대 입력 토큰 수입니다. 기본은 4096입니다.
  • OCO_TOKENS_MAX_OUTPUT: 최대 출력 토큰 수입니다. 기본은 500입니다.
  • OCO_OPENAI_BASE_PATH: OpenAI API의 프록시 경로를 설정할 수 있습니다.
  • OCO_DESCRIPTION: 변경 사항에 대한 3문장 내외의 설명이 포함된 메시지를 게시합니다.
  • OCO_EMOJI: GitMoji 사용 여부입니다. 기본값은 false 입니다.
  • OCO_MODEL: 모델명을 입력합니다.
  • OCO_LANGUAGE: 언어 코드를 입력합니다. OCO_LANGUAGE를 ko로 변경하여 한국어 커밋 메시지 작성도 가능하지만 추천하지 않습니다.
  • OCO_MESSAGE_TEMPLATE_PLACEHOLDER: 메시지 템플릿 자리 표시자입니다 기본값은 $msg 입니다.
  • OCO_PROMPT_MODULE: 커밋 메시지 생성에 사용할 프롬프트 모듈입니다. OpenCommit은 기본적으로 자체 conventional-commit 메시지 생성기를 사용합니다. 그러나 로컬 구성을 준수하는 커밋 메시지를 생성하려면 @commitlint 프롬프트 모듈을 사용하도록 전환할 수 있습니다.
  • OCO_ONE_LINE_COMMIT: 한 줄 커밋 메시지 여부입니다 기본값은 false 입니다.
  • OCO_GITPUSH: git으로 자동 푸시입니다. 기본적으로 활성화 되어 있습니다.

 

플래그

oco 명령과 함께 사용할 수 있는 여러 가지 옵션 플래그가 있습니다.

 

GitMoji 전체 이모티콘 사용

이 플래그는 OCO_EMOJI 구성 항목이 true로 설정된 경우에만 사용할 수 있습니다. 이 플래그를 사용하면 GitMoji의 모든 이모티콘을 사용할 수 있으며, 기본적으로 GitMoji 전체 이모티콘은 10개(🐛✨📝🚀✅♻️⬆️🔧🌐💡)만 포함된 false로 설정되어 있습니다. 이는 각 요청에 전송되는 토큰 수를 제한하기 때문입니다.

 

GitMoji의 전체 이모티콘을 사용하려면 --fgm 플래그를 사용합니다.

oco --fgm

 

커밋 확인 건너뛰기

이 플래그를 사용하면 커밋 메시지를 수동으로 확인하지 않고 자동으로 변경 내용을 커밋할 수 있습니다. 커밋 프로세스를 간소화하고 싶은 사용자에게 유용합니다.

oco --yes

 

Git 플래그

opencommit 또는 oco 명령은 git commit -m "${generatedMessage}" 명령 대신 사용할 수 있습니다. 즉, git commit 명령과 함께 사용되는 일반적인 플래그는 opencommit 또는 oco를 사용할 때도 적용됩니다.

예를 들어,

oco --no-verify

는 다음과 같이 변환됩니다.

git commit -m "${generatedMessage}" --no-verify

 

메시지 템플릿

생성된 메시지에 메시지를 포함하려면 템플릿 함수를 사용할 수 있습니다. 예를 들어:

oco '#205: $msg’

opencommit은 매개변수의 자리 표시자를 검사하여 문제나 풀 요청과 같은 추가 정보를 자리 표시자 앞뒤에 추가할 수 있습니다. 마찬가지로 OCO_MESSAGE_TEMPLATE_PLACEHOLDER 구성 항목을 $m으로 단순화하는 등 사용자 지정할 수도 있습니다!

 

특정 파일 제외하기: .opencommitignore

.opencommitignore 파일을 만들어 OpenAI로 전송되지 않는 파일을 제거할 수 있습니다.

예를 들어:

path/to/large-asset.zip
**/*.jpg

이렇게 하면 OpenCommit이 아티팩트와 큰 파일을 업로드하지 못하도록 합니다.

기본적으로 OpenCommit은 *-lock.**.lock과 일치하는 파일을 무시합니다.

 


 

이 글은 OpenCommit 레포지토리의 README.md를 참고하여 작성되었습니다.
반응형