用人工智能杀死蹩脚的提交?
此存储库中的所有提交均由 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,它更好,但更贵。