用人工智慧殺死蹩腳的提交?
此儲存庫中的所有提交均由 OpenCommit 編寫 - 查看提交以了解 OpenCommit 的工作原理。表情符號和長提交描述都是可配置的,基本上一切都是可配置的。
您只需透過 CLI 運行 OpenCommit 即可使用它,例如oco
。 2 秒後,您的分階段變更就會透過有意義的訊息提交。
全域安裝 OpenCommit 以在任何儲存庫中使用:
npm install -g opencommit
從 OpenAI 或其他支援的 LLM 提供者(我們都支援)取得您的 API 金鑰。確保將 OpenAI 付款詳細資訊新增至您的帳戶,以便 API 正常運作。
將金鑰設定為 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/ 中設定了 llama,則可以變更預設端點 url。
您可以透過設定OCO_API_URL
環境變數來執行此操作,如下所示:
oco config set OCO_API_URL= ' http://192.168.1.10:11434/api/chat '
其中 192.168.1.10 是端點 URL 的範例,您在其中設定了 ollama。
有多個可選標誌可與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 之間的整合是在OCO_PROMPT_MODULE
設定為@commitlint
的情況下首次執行 OpenCommit 時自動完成的。但是,如果您需要強制設定或重置@commitlint
的配置,您可以執行以下命令:
oco commitlint force
若要查看@commitlint
產生的配置,可以使用以下命令:
oco commitlint get
這使您可以確保按照需要設定配置。
此外,整合還會建立一個名為.opencommit-commitlint
的文件,其中包含用於本地@commitlint
配置的提示。您可以修改此文件來微調 OpenAI 產生的範例提交訊息。這使您可以根據自己的喜好或專案指南靈活地進行調整。
OpenCommit 會在專案目錄中產生一個名為.opencommit-commitlint
的文件,其中包含用於本地@commitlint
配置的提示。您可以修改此文件來微調 OpenAI 產生的範例提交訊息。如果本機@commitlint
配置發生更改,該檔案將在下次執行 OpenCommit 時更新。
這使您可以更好地控制產生的提交訊息,從而允許進行符合專案約定的自訂。
可以使用opencommit
或oco
指令來取代git commit -m "${generatedMessage}"
指令。這意味著在使用opencommit
或oco
時,與git commit
指令一起使用的任何常規標誌也將被套用。
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
) ;
此行負責用實際的commitMessage
取代messageTemplate
中的佔位符。
例如,使用命令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
或遵循 IDE 原始碼控制功能的流程,當它呼叫git commit
指令時 — 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
就是這樣。現在,當您推送到儲存庫中的任何分支時,所有新提交都將由您永不疲倦的人工智慧進行改進。
確保在branches-ignore
中排除公共協作分支( main
、 dev
etc
),以便 OpenCommit 在改進訊息時不會在那裡重新調整提交的基礎。
互動式變基( rebase -i
)會變更提交的 SHA,因此遠端中的提交歷史記錄與本機分支歷史記錄不同。如果您獨自在分支上工作,這沒問題,但對於其他協作者來說可能會不方便。
您自行支付對 OpenAI API 的請求費用。
OpenCommit 在本機上儲存您的金鑰。
OpenCommit 預設使用 3.5-turbo 模型,每個臨時工作日不應超過 0.10 美元。
你可以改用gpt-4,它更好,但更貴。