AI로 절름발이 커밋을 죽이는 ??
이 저장소의 모든 커밋은 OpenCommit에서 작성되었습니다. OpenCommit이 어떻게 작동하는지 보려면 커밋을 살펴보세요. 이모티콘과 긴 커밋 설명은 구성 가능하며 기본적으로 모든 것이 구성 가능합니다.
oco
와 같은 CLI를 통해 간단히 실행하여 OpenCommit을 사용할 수 있습니다. 2초만 지나면 단계적 변경사항이 의미 있는 메시지와 함께 커밋됩니다.
모든 저장소에서 사용할 수 있도록 OpenCommit을 전역적으로 설치합니다.
npm install -g opencommit
OpenAI 또는 기타 지원되는 LLM 공급자로부터 API 키를 받으세요(우리는 모두 지원합니다). API가 작동하도록 OpenAI 결제 세부정보를 계정에 추가했는지 확인하세요.
키를 OpenCommit 구성으로 설정합니다.
oco config set OCO_API_KEY= < your_api_key >
API 키는 ~/.opencommit
구성 파일에 로컬로 저장됩니다.
oco
명령으로 OpenCommit을 호출하여 단계적 변경 사항에 대한 커밋 메시지를 생성할 수 있습니다.
git add < files... >
oco
git add
실행은 선택 사항이며, oco
대신 수행합니다.
ollama를 통해 로컬 모델로 실행할 수도 있습니다.
ollama run mistral
(모델을 가져오려면 이 작업을 한 번만 수행)git add < files... >
oco config set OCO_AI_PROVIDER= ' ollama ' OCO_MODEL= ' llama3:8b '
기본 모델은 mistral
입니다.
GPU가 있는(로컬이 아닌) 다른 시스템의 docker/에 설정된 ollama가 있는 경우 기본 엔드포인트 URL을 변경할 수 있습니다.
다음과 같이 OCO_API_URL
환경 변수를 설정하면 됩니다.
oco config set OCO_API_URL= ' http://192.168.1.10:11434/api/chat '
여기서 192.168.1.10은 ollama가 설정된 엔드포인트 URL의 예입니다.
oco
명령과 함께 사용할 수 있는 여러 가지 선택적 플래그가 있습니다:
GitMoji 사양 링크: https://gitmoji.dev/
이 플래그는 OCO_EMOJI
구성 항목이 true
로 설정된 경우에만 사용할 수 있습니다. 이 플래그를 사용하면 사용자는 GitMoji 사양의 모든 이모티콘을 사용할 수 있습니다. 기본적으로 GitMoji 전체 사양은 false
로 설정되어 있으며 10개의 이모티콘만 포함됩니다(?✅♻️⬆️?).
이는 각 요청에서 전송되는 토큰 수를 제한하기 때문입니다. 그러나 전체 GitMoji 사양을 사용하려면 --fgm
플래그를 사용할 수 있습니다.
oco --fgm
이 플래그를 사용하면 사용자는 커밋 메시지를 수동으로 확인하지 않고도 변경 사항을 자동으로 커밋할 수 있습니다. 이는 커밋 프로세스를 간소화하고 추가 단계를 피하려는 사용자에게 유용합니다. 이 플래그를 사용하려면 다음 명령을 실행하면 됩니다.
oco --yes
.env
파일을 생성하고 다음과 같이 OpenCommit 구성 변수를 추가합니다.
...
OCO_AI_PROVIDER = <openai (default), anthropic, azure, ollama, gemini, flowise>
OCO_API_KEY = <your OpenAI API token> // or other LLM provider API token
OCO_API_URL = <may be used to set proxy path to OpenAI api>
OCO_TOKENS_MAX_INPUT = <max model token limit (default: 4096)>
OCO_TOKENS_MAX_OUTPUT = <max response tokens (default: 500)>
OCO_DESCRIPTION = <postface a message with ~3 sentences description of the changes>
OCO_EMOJI = <boolean, add GitMoji>
OCO_MODEL = <either 'gpt-4o', 'gpt-4', 'gpt-4-turbo', 'gpt-3.5-turbo' (default), 'gpt-3.5-turbo-0125', 'gpt-4-1106-preview', 'gpt-4-turbo-preview' or 'gpt-4-0125-preview' or any Anthropic or Ollama model or any string basically, but it should be a valid model name>
OCO_LANGUAGE = <locale, scroll to the bottom to see options>
OCO_MESSAGE_TEMPLATE_PLACEHOLDER = <message template placeholder, default: ' $msg '>
OCO_PROMPT_MODULE = <either conventional-commit or @commitlint, default: conventional-commit>
OCO_ONE_LINE_COMMIT = <one line commit message, default: false>
전역 구성은 로컬 구성과 동일하지만 전역 ~/.opencommit
구성 파일에 저장되고 oco config set
명령(예: oco config set OCO_MODEL=gpt-4o
으로 설정됩니다.
로컬 구성은 여전히 글로벌 구성보다 우선순위가 높지만 OCO_MODEL
및 OCO_LOCALE
전역적으로 설정하고 저장소별로 OCO_EMOJI
및 OCO_DESCRIPTION
에 대한 로컬 구성을 설정할 수 있어 더 편리합니다.
위의 변수 중 하나를 다음과 같이 설정하면 됩니다.
oco config set OCO_MODEL=gpt-4o-mini
메시지 머리말을 시작하도록 GitMoji를 구성합니다.
oco config set OCO_EMOJI=true
머리말 이모티콘을 제거하려면 다음 단계를 따르세요.
oco config set OCO_EMOJI=false
다른 구성 옵션도 동일하게 작동합니다.
OCO_WHY
구성을 true
로 설정하면 OpenCommit에서 커밋 메시지 후에 변경 사항이 수행된 이유에 대한 간단한 설명을 출력할 수 있습니다. 기본값은 false
입니다.
이 작업을 정확하게 수행하려면 일종의 인덱스나 임베딩에 '파일의 기능'을 저장하고 정확한 git 커밋 메시지에 대한 조회(RAG 정도)를 수행해야 합니다. 이 티켓 #398에 대해 이 댓글을 작성하고 싶다면 거기서부터 함께 갑시다.
oco config set OCO_WHY=true
기본적으로 OpenCommit은 gpt-4o-mini
모델을 사용합니다.
성능은 더 좋지만 비용이 더 많이 드는 gpt-4o로 전환할 수 있습니다.
oco config set OCO_MODEL=gpt-4o
또는 더 저렴한 옵션으로:
oco config set OCO_MODEL=gpt-3.5-turbo
기본적으로 OpenCommit은 OpenAI를 사용합니다.
Azure OpenAI 서비스나 Flowise 또는 Ollama로 전환할 수 있습니다.
oco config set OCO_AI_PROVIDER=azure OCO_API_KEY= < your_azure_api_key > OCO_API_URL= < your_azure_endpoint >
oco config set OCO_AI_PROVIDER=flowise OCO_API_KEY= < your_flowise_api_key > OCO_API_URL= < your_flowise_endpoint >
oco config set OCO_AI_PROVIDER=ollama OCO_API_KEY= < your_ollama_api_key > OCO_API_URL= < your_ollama_endpoint >
커밋 메시지를 생성하는 데 사용되는 언어를 전역적으로 지정하려면 다음을 수행하세요.
# de, German, Deutsch
oco config set OCO_LANGUAGE=de
oco config set OCO_LANGUAGE=German
oco config set OCO_LANGUAGE=Deutsch
# fr, French, française
oco config set OCO_LANGUAGE=fr
oco config set OCO_LANGUAGE=French
oco config set OCO_LANGUAGE=française
기본 언어 설정은 영어 입니다. 사용 가능한 모든 언어는 현재 i18n 폴더에 나열되어 있습니다.
git으로 푸시하라는 메시지는 기본적으로 켜져 있지만 끄고 싶다면 다음을 사용하세요.
oco config set OCO_GITPUSH=false
원격으로 푸시할지 묻지 않고 커밋이 확인되면 바로 종료됩니다.
@commitlint
로 전환 OpenCommit을 사용하면 커밋 메시지를 생성하는 데 사용되는 프롬프트 모듈을 선택할 수 있습니다. 기본적으로 OpenCommit은 기존 커밋 메시지 생성기를 사용합니다. 그러나 원하는 경우 @commitlint
프롬프트 모듈을 사용하도록 전환할 수 있습니다. 이 옵션을 사용하면 로컬 구성과 관련하여 커밋 메시지를 생성할 수 있습니다.
다음 명령을 실행하여 이 옵션을 설정할 수 있습니다.
oco config set OCO_PROMPT_MODULE= < module >
<module>
conventional-commit
또는 @commitlint
로 바꾸세요.
'@commitlint
프롬프트 모듈 사용으로 전환하려면 다음을 실행하세요.
oco config set OCO_PROMPT_MODULE=@commitlint
기본 일반 커밋 메시지 생성기로 다시 전환하려면 다음을 실행하세요.
oco config set OCO_PROMPT_MODULE=conventional-commit
@commitlint
와 통합 @commitlint
와 OpenCommit 간의 통합은 @commitlint
로 설정된 OCO_PROMPT_MODULE
사용하여 OpenCommit을 처음 실행할 때 자동으로 수행됩니다. 그러나 @commitlint
구성을 강제로 설정하거나 재설정해야 하는 경우 다음 명령을 실행할 수 있습니다.
oco commitlint force
@commitlint
에 대해 생성된 구성을 보려면 다음 명령을 사용할 수 있습니다.
oco commitlint get
이를 통해 구성이 원하는 대로 설정되었는지 확인할 수 있습니다.
또한 통합은 로컬 @commitlint
구성에 사용되는 프롬프트가 포함된 .opencommit-commitlint
라는 파일을 생성합니다. 이 파일을 수정하여 OpenAI에서 생성된 커밋 메시지 예시를 세부 조정할 수 있습니다. 이를 통해 선호도나 프로젝트 지침에 따라 유연하게 조정할 수 있습니다.
OpenCommit은 로컬 @commitlint
구성에 사용되는 프롬프트가 포함된 .opencommit-commitlint
라는 파일을 프로젝트 디렉터리에 생성합니다. 이 파일을 수정하여 OpenAI에서 생성된 커밋 메시지 예시를 세부 조정할 수 있습니다. 로컬 @commitlint
구성이 변경되면 다음에 OpenCommit이 실행될 때 이 파일이 업데이트됩니다.
이를 통해 생성된 커밋 메시지를 더 효과적으로 제어할 수 있으므로 프로젝트 규칙에 맞게 사용자 정의할 수 있습니다.
git commit -m "${generatedMessage}"
명령 대신 opencommit
또는 oco
명령을 사용할 수 있습니다. 즉, git commit
명령과 함께 사용되는 일반 플래그는 opencommit
또는 oco
사용할 때도 적용됩니다.
oco --no-verify
다음으로 번역됩니다:
git commit -m " ${generatedMessage} " --no-verify
생성된 메시지에 메시지를 포함하려면 템플릿 기능을 활용할 수 있습니다. 예를 들면 다음과 같습니다.
oco ' #205: $msg’
opencommit은 매개변수의 자리 표시자를 검사하여 관련 이슈 또는 끌어오기 요청과 같은 자리 표시자 앞뒤에 추가 정보를 추가할 수 있도록 합니다. 마찬가지로 OCO_MESSAGE_TEMPLATE_PLACEHOLDER 구성 항목을 사용자 정의하는 옵션이 있습니다(예: $m으로 단순화)."
opencommit
도구의 OCO_MESSAGE_TEMPLATE_PLACEHOLDER
기능을 사용하면 사용자가 템플릿 기능을 사용하여 생성된 커밋 메시지 내에 사용자 지정 메시지를 삽입할 수 있습니다. 이 구성은 커밋 메시지의 유연성과 사용자 정의 가능성을 향상시켜 사용자가 커밋 내에 직접 관련 정보를 더 쉽게 포함할 수 있도록 설계되었습니다.
코드베이스에서 이 기능의 구현은 다음 세그먼트에서 찾을 수 있습니다.
commitMessage = messageTemplate . replace (
config . OCO_MESSAGE_TEMPLATE_PLACEHOLDER ,
commitMessage
) ;
이 줄은 messageTemplate
의 자리 표시자를 실제 commitMessage
로 바꾸는 역할을 합니다.
예를 들어, oco '$msg #205'
명령을 사용하면 사용자는 이 기능을 활용할 수 있습니다. 제공된 코드는 해당 명령의 백엔드 메커니즘을 나타내며 자리 표시자가 적절한 커밋 메시지로 대체되도록 합니다.
사용자가 원하는 커밋 메시지를 생성하면 생성된 메시지를 사용하여 커밋을 진행할 수 있습니다. 기능의 전체 잠재력과 구현 세부 사항을 이해함으로써 사용자는 생성된 메시지를 커밋에 자신있게 사용할 수 있습니다.
.opencommitignore
파일을 생성하여 OpenAI로 전송되는 파일을 제거할 수 있습니다. 예를 들어:
path/to/large-asset.zip
**/*.jpg
이는 opencommit이 아티팩트 및 대용량 파일을 업로드하는 것을 방지하는 데 도움이 됩니다.
기본적으로 opencommit은 *-lock.*
및 *.lock
과 일치하는 파일을 무시합니다.
OpenCommit을 Git prepare-commit-msg
후크로 설정할 수 있습니다. Hook은 IDE 소스 제어와 통합되어 커밋하기 전에 메시지를 편집할 수 있습니다.
후크를 설정하려면:
oco hook set
후크 설정을 해제하려면 다음 안내를 따르세요.
oco hook unset
후크를 사용하려면:
git add < files... >
git commit
또는 git commit
명령을 호출할 때 IDE 소스 제어 기능의 프로세스를 따르십시오. OpenCommit이 흐름에 통합됩니다.
OpenCommit은 이제 원격으로 푸시할 때 모든 새로운 커밋 메시지를 자동으로 개선하는 GitHub Action으로 제공됩니다!
모든 리포지토리 브랜치의 모든 커밋이 의미가 있고 fix1
또는 done2
처럼 허술하지 않은지 확인하려는 경우에 유용합니다.
아래 내용으로 .github/workflows/opencommit.yml
파일을 만듭니다.
name : ' OpenCommit Action '
on :
push :
# this list of branches is often enough,
# but you may still ignore other public branches
branches-ignore : [main master dev development release]
jobs :
opencommit :
timeout-minutes : 10
name : OpenCommit
runs-on : ubuntu-latest
permissions : write-all
steps :
- name : Setup Node.js Environment
uses : actions/setup-node@v2
with :
node-version : ' 16 '
- uses : actions/checkout@v3
with :
fetch-depth : 0
- uses : di-sukharev/[email protected]
with :
GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
env :
# set openAI api key in repo actions secrets,
# for openAI keys go to: https://platform.openai.com/account/api-keys
# for repo secret go to: <your_repo_url>/settings/secrets/actions
OCO_API_KEY : ${{ secrets.OCO_API_KEY }}
# customization
OCO_TOKENS_MAX_INPUT : 4096
OCO_TOKENS_MAX_OUTPUT : 500
OCO_OPENAI_BASE_PATH : ' '
OCO_DESCRIPTION : false
OCO_EMOJI : false
OCO_MODEL : gpt-4o
OCO_LANGUAGE : en
OCO_PROMPT_MODULE : conventional-commit
그게 다야. 이제 리포지토리의 어느 지점으로든 푸시하면 지치지 않는 AI에 의해 모든 새로운 커밋이 개선됩니다.
branches-ignore
에서 공개 협업 브랜치( main
, dev
etc
)를 제외해야 OpenCommit이 메시지를 개선하는 동안 커밋을 리베이스하지 않습니다.
대화형 리베이스( rebase -i
)는 커밋의 SHA를 변경하므로 원격 커밋 기록이 로컬 분기 기록과 달라집니다. 브랜치에서 혼자 작업하는 경우에는 괜찮지만 다른 공동 작업자에게는 불편할 수 있습니다.
OpenAI API에 대한 요청 비용은 직접 지불합니다.
OpenCommit은 키를 로컬에 저장합니다.
OpenCommit은 기본적으로 3.5터보 모델을 사용하므로 일반 근무일당 $0.10를 초과해서는 안 됩니다.
gpt-4로 전환하면 더 좋지만 더 비쌉니다.