AI で不完全なコミットを排除する ??
このリポジトリ内のすべてのコミットは OpenCommit によって作成されています。OpenCommit がどのように機能するかを確認するには、コミットを見てください。絵文字と長いコミットの説明は構成可能であり、基本的にはすべて構成可能です。
OpenCommit は、このoco
のように CLI 経由で実行するだけで使用できます。 2 秒かかると、段階的な変更が意味のあるメッセージとともにコミットされます。
OpenCommit をグローバルにインストールして、任意のリポジトリで使用します。
npm install -g opencommit
OpenAI またはその他のサポートされている LLM プロバイダーから API キーを取得します (すべてサポートされています)。 API が機能するように、OpenAI 支払いの詳細を必ずアカウントに追加してください。
キーを OpenCommit config に設定します。
oco config set OCO_API_KEY= < your_api_key >
API キーはローカルの~/.opencommit
構成ファイルに保存されます。
oco
コマンドを使用して OpenCommit を呼び出して、段階的な変更のコミット メッセージを生成できます。
git add < files... >
oco
git add
の実行はオプションで、 oco
自動的に実行します。
ollam を介してローカル モデルで実行することもできます。
ollama run mistral
(モデルをプルするためにこれを 1 回だけ実行します)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 は、ollam が設定されているエンドポイント 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 commit メッセージの検索 (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 Service、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 の間の統合は、 OCO_PROMPT_MODULE
@commitlint
に設定して 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 はパラメーター内のプレースホルダーを検査し、関連する Issue や Pull Request などの追加情報をプレースホルダーの前後に追加できるようにします。同様に、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
フックとして設定できます。フックは IDE ソース管理と統合されており、コミットする前にメッセージを編集できます。
フックを設定するには:
oco hook set
フックの設定を解除するには:
oco hook unset
フックを使用するには:
git add < files... >
git commit
または、IDE ソース管理機能がgit commit
コマンドを呼び出すときのプロセスに従います。OpenCommit はフローに統合されます。
OpenCommit が GitHub アクションとして利用可能になり、リモートにプッシュするとすべての新しいコミット メッセージが自動的に改善されます。
これは、すべてのリポジトリ ブランチのすべてのコミットが意味のあるものであり、 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 に切り替えることもできます。gpt-4 の方が優れていますが、高価です。