Matar commits coxos com IA ??
Todos os commits neste repositório são de autoria do OpenCommit — veja os commits para ver como o OpenCommit funciona. Emojis e descrições longas de commit são configuráveis, basicamente tudo é.
Você pode usar o OpenCommit simplesmente executando-o por meio da CLI como este oco
. 2 segundos e suas alterações preparadas serão confirmadas com uma mensagem significativa.
Instale o OpenCommit globalmente para usar em qualquer repositório:
npm install -g opencommit
Obtenha sua chave de API da OpenAI ou de outros provedores LLM suportados (nós oferecemos suporte a todos eles). Certifique-se de adicionar seus detalhes de pagamento OpenAI à sua conta, para que a API funcione.
Defina a chave para configuração do OpenCommit:
oco config set OCO_API_KEY= < your_api_key >
Sua chave de API é armazenada localmente no arquivo de configuração ~/.opencommit
.
Você pode chamar o OpenCommit com o comando oco
para gerar uma mensagem de commit para suas alterações preparadas:
git add < files... >
oco
Executar git add
é opcional, oco
fará isso por você.
Você também pode executá-lo com modelo local através do ollama:
ollama run mistral
(faça isso apenas uma vez, para puxar o modelo)git add < files... >
oco config set OCO_AI_PROVIDER= ' ollama ' OCO_MODEL= ' llama3:8b '
O modelo padrão é mistral
.
Se você tiver ollama configurado em docker/ em outra máquina com GPUs (não localmente), poderá alterar o URL do endpoint padrão.
Você pode fazer isso definindo a variável de ambiente OCO_API_URL
da seguinte maneira:
oco config set OCO_API_URL= ' http://192.168.1.10:11434/api/chat '
onde 192.168.1.10 é um exemplo de URL de endpoint, onde você configurou ollama.
Existem vários sinalizadores opcionais que podem ser usados com o comando oco
:
Link para a especificação do GitMoji: https://gitmoji.dev/
Este sinalizador só poderá ser usado se o item de configuração OCO_EMOJI
estiver definido como true
. Este sinalizador permite que os usuários usem todos os emojis na especificação GitMoji. Por padrão, a especificação completa do GitMoji é definida como false
, que inclui apenas 10 emojis (?✅♻️⬆️?).
Isso se deve ao limite do número de tokens enviados em cada solicitação. No entanto, se desejar usar a especificação completa do GitMoji, você pode usar o sinalizador --fgm
.
oco --fgm
Este sinalizador permite que os usuários confirmem automaticamente as alterações sem precisar confirmar manualmente a mensagem de commit. Isto é útil para usuários que desejam agilizar o processo de confirmação e evitar etapas adicionais. Para usar esse sinalizador, você pode executar o seguinte comando:
oco --yes
Crie um arquivo .env
e adicione variáveis de configuração do OpenCommit assim:
...
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>
As configurações globais são iguais às configurações locais, mas são armazenadas no arquivo de configuração global ~/.opencommit
e definidas com o comando oco config set
, por exemplo, oco config set OCO_MODEL=gpt-4o
.
A configuração local ainda tem mais prioridade do que a configuração global, mas você pode definir OCO_MODEL
e OCO_LOCALE
globalmente e definir configurações locais para OCO_EMOJI
e OCO_DESCRIPTION
por repositório, o que é mais conveniente.
Basta definir qualquer uma das variáveis acima assim:
oco config set OCO_MODEL=gpt-4o-mini
Configure o GitMoji para prefaciar uma mensagem.
oco config set OCO_EMOJI=true
Para remover emojis de prefácio:
oco config set OCO_EMOJI=false
Outras opções de configuração estão se comportando da mesma forma.
Você pode definir a configuração OCO_WHY
como true
para que o OpenCommit produza uma breve descrição de POR QUE as alterações foram feitas após a mensagem de commit. O padrão é false
.
Para tornar esse desempenho preciso, devemos armazenar 'o que os arquivos fazem' em algum tipo de índice ou incorporação e realizar uma pesquisa (tipo RAG) para obter a mensagem precisa do git commit. Se você tem vontade de construir isso comente esse ticket #398 e vamos partir daí juntos.
oco config set OCO_WHY=true
Por padrão, o OpenCommit usa o modelo gpt-4o-mini
.
Você pode mudar para o gpt-4o, que tem melhor desempenho, mas custa mais?
oco config set OCO_MODEL=gpt-4o
ou como uma opção mais barata:
oco config set OCO_MODEL=gpt-3.5-turbo
Por padrão, o OpenCommit usa OpenAI.
Você pode mudar para Azure OpenAI Service ou Flowise ou 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 >
Para especificar globalmente o idioma usado para gerar mensagens de commit:
# 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
A configuração padrão do idioma é o Inglês Todos os idiomas disponíveis estão listados na pasta i18n
Um prompt para enviar para o git está ativado por padrão, mas se você quiser desativá-lo, basta usar:
oco config set OCO_GITPUSH=false
e ele sairá logo após a confirmação do commit, sem perguntar se você gostaria de enviar para remoto.
@commitlint
OpenCommit permite escolher o módulo de prompt usado para gerar mensagens de commit. Por padrão, o OpenCommit usa seu gerador de mensagens de commit convencional. No entanto, você pode passar a usar o módulo de prompt @commitlint
se preferir. Esta opção permite gerar mensagens de commit em relação à configuração local.
Você pode definir esta opção executando o seguinte comando:
oco config set OCO_PROMPT_MODULE= < module >
Substitua <module>
por conventional-commit
ou @commitlint
.
Para passar a usar o módulo de prompt '@commitlint
, execute:
oco config set OCO_PROMPT_MODULE=@commitlint
Para voltar ao gerador de mensagens de confirmação convencional padrão, execute:
oco config set OCO_PROMPT_MODULE=conventional-commit
@commitlint
A integração entre @commitlint
e OpenCommit é feita automaticamente na primeira vez que o OpenCommit é executado com OCO_PROMPT_MODULE
definido como @commitlint
. No entanto, se precisar forçar a definição ou redefinir a configuração de @commitlint
, você pode executar o seguinte comando:
oco commitlint force
Para visualizar a configuração gerada para @commitlint
, você pode usar este comando:
oco commitlint get
Isso permite que você garanta que a configuração seja definida conforme desejado.
Além disso, a integração cria um arquivo chamado .opencommit-commitlint
que contém os prompts usados para a configuração local @commitlint
. Você pode modificar este arquivo para ajustar o exemplo de mensagem de commit gerada pelo OpenAI. Isso lhe dá flexibilidade para fazer ajustes com base em suas preferências ou diretrizes do projeto.
OpenCommit gera um arquivo chamado .opencommit-commitlint
no diretório do seu projeto que contém os prompts usados para a configuração local @commitlint
. Você pode modificar este arquivo para ajustar o exemplo de mensagem de commit gerada pelo OpenAI. Se a configuração local @commitlint
for alterada, este arquivo será atualizado na próxima vez que o OpenCommit for executado.
Isso oferece maior controle sobre as mensagens de commit geradas, permitindo uma personalização que se alinha às convenções do seu projeto.
Os comandos opencommit
ou oco
podem ser usados no lugar do comando git commit -m "${generatedMessage}"
. Isso significa que quaisquer sinalizadores regulares usados com o comando git commit
também serão aplicados ao usar opencommit
ou oco
.
oco --no-verify
é traduzido para:
git commit -m " ${generatedMessage} " --no-verify
Para incluir uma mensagem na mensagem gerada, você pode utilizar a função de modelo, por exemplo:
oco ' #205: $msg’
opencommit examina espaços reservados nos parâmetros, permitindo anexar informações adicionais antes e depois dos espaços reservados, como o problema relevante ou solicitação pull. Da mesma forma, você tem a opção de personalizar o item de configuração OCO_MESSAGE_TEMPLATE_PLACEHOLDER, por exemplo, simplificando-o para $m!"
O recurso OCO_MESSAGE_TEMPLATE_PLACEHOLDER
na ferramenta opencommit
permite aos usuários incorporar uma mensagem personalizada na mensagem de commit gerada usando uma função de modelo. Essa configuração foi projetada para aprimorar a flexibilidade e a personalização das mensagens de commit, tornando mais fácil para os usuários incluir informações relevantes diretamente em seus commits.
Em nossa base de código, a implementação deste recurso pode ser encontrada no seguinte segmento:
commitMessage = messageTemplate . replace (
config . OCO_MESSAGE_TEMPLATE_PLACEHOLDER ,
commitMessage
) ;
Esta linha é responsável por substituir o espaço reservado no messageTemplate
pelo commitMessage
real.
Por exemplo, usando o comando oco '$msg #205'
, os usuários podem aproveitar esse recurso. O código fornecido representa a mecânica de backend de tais comandos, garantindo que o espaço reservado seja substituído pela mensagem de commit apropriada.
Depois que os usuários gerarem a mensagem de commit desejada, eles poderão prosseguir para o commit usando a mensagem gerada. Ao compreender todo o potencial do recurso e seus detalhes de implementação, os usuários podem usar com segurança as mensagens geradas para seus commits.
Você pode impedir que arquivos sejam enviados ao OpenAI criando um arquivo .opencommitignore
. Por exemplo:
path/to/large-asset.zip
**/*.jpg
Isso ajuda a evitar que o opencommit carregue artefatos e arquivos grandes.
Por padrão, o opencommit ignora os arquivos correspondentes: *-lock.*
e *.lock
Você pode definir o OpenCommit como gancho Git prepare-commit-msg
. O Hook se integra ao seu controle de origem IDE e permite que você edite a mensagem antes de confirmar.
Para definir o gancho:
oco hook set
Para desarmar o gancho:
oco hook unset
Para usar o gancho:
git add < files... >
git commit
Ou siga o processo do seu recurso IDE Source Control, quando ele chama o comando git commit
- o OpenCommit será integrado ao fluxo.
OpenCommit agora está disponível como uma ação GitHub que melhora automaticamente todas as novas mensagens de commit quando você envia para remoto!
Isso é ótimo se você quiser ter certeza de que todos os commits em todas as ramificações do seu repositório são significativos e não ruins como fix1
ou done2
.
Crie um arquivo .github/workflows/opencommit.yml
com o conteúdo abaixo:
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
É isso. Agora, quando você envia push para qualquer branch em seu repositório, todos os NOVOS commits estão sendo aprimorados por sua IA incansável.
Certifique-se de excluir ramificações de colaboração pública ( main
, dev
, etc
) em branches-ignore
, para que o OpenCommit não rebase os commits lá enquanto melhora as mensagens.
O rebase interativo ( rebase -i
) altera o SHA dos commits, de modo que o histórico de commits remotos se torna diferente do histórico do branch local. Não há problema se você trabalhar sozinho na filial, mas pode ser inconveniente para outros colaboradores.
Você paga por suas solicitações à API OpenAI por conta própria.
OpenCommit armazena sua chave localmente.
O OpenCommit por padrão usa o modelo 3,5 turbo, não deve exceder US$ 0,10 por dia de trabalho casual.
Você pode mudar para o gpt-4, é melhor, mas mais caro.