¿Matar compromisos cojos con IA?
Todas las confirmaciones en este repositorio están escritas por OpenCommit; mire las confirmaciones para ver cómo funciona OpenCommit. Los emojis y las descripciones largas de confirmación son configurables, básicamente todo lo es.
Puede utilizar OpenCommit simplemente ejecutándolo a través de la CLI como este oco
. 2 segundos y los cambios preparados se confirman con un mensaje significativo.
Instale OpenCommit globalmente para usarlo en cualquier repositorio:
npm install -g opencommit
Obtenga su clave API de OpenAI u otros proveedores de LLM compatibles (los admitimos a todos). Asegúrese de agregar sus datos de pago de OpenAI a su cuenta para que la API funcione.
Establezca la clave para la configuración de OpenCommit:
oco config set OCO_API_KEY= < your_api_key >
Su clave API se almacena localmente en el archivo de configuración ~/.opencommit
.
Puede llamar a OpenCommit con el comando oco
para generar un mensaje de confirmación para sus cambios preparados:
git add < files... >
oco
Ejecutar git add
es opcional, oco
lo hará por usted.
También puedes ejecutarlo con el modelo local a través de ollama:
ollama run mistral
(haga esto solo una vez, para extraer el modelo)git add < files... >
oco config set OCO_AI_PROVIDER= ' ollama ' OCO_MODEL= ' llama3:8b '
El modelo predeterminado es mistral
.
Si tiene ollama configurada en Docker/ en otra máquina con GPU (no localmente), puede cambiar la URL del punto final predeterminado.
Puede hacerlo configurando la variable de entorno OCO_API_URL
de la siguiente manera:
oco config set OCO_API_URL= ' http://192.168.1.10:11434/api/chat '
donde 192.168.1.10 es un ejemplo de URL de punto final, donde tiene ollama configurada.
Hay varios indicadores opcionales que se pueden usar con el comando oco
:
Enlace a la especificación de GitMoji: https://gitmoji.dev/
Este indicador solo se puede utilizar si el elemento de configuración OCO_EMOJI
está establecido en true
. Esta bandera permite a los usuarios usar todos los emojis en la especificación de GitMoji. De forma predeterminada, la especificación completa de GitMoji está configurada en false
, que solo incluye 10 emojis (?✅♻️⬆️?).
Esto se debe a limitar la cantidad de tokens enviados en cada solicitud. Sin embargo, si desea utilizar la especificación completa de GitMoji, puede utilizar la opción --fgm
.
oco --fgm
Este indicador permite a los usuarios confirmar automáticamente los cambios sin tener que confirmar manualmente el mensaje de confirmación. Esto es útil para los usuarios que desean agilizar el proceso de confirmación y evitar pasos adicionales. Para usar esta bandera, puede ejecutar el siguiente comando:
oco --yes
Cree un archivo .env
y agregue variables de configuración de OpenCommit así:
...
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>
Las configuraciones globales son las mismas que las configuraciones locales, pero se almacenan en el archivo de configuración global ~/.opencommit
y se configuran con el comando oco config set
, por ejemplo, oco config set OCO_MODEL=gpt-4o
.
La configuración local todavía tiene más prioridad que la configuración global, pero puede configurar OCO_MODEL
y OCO_LOCALE
globalmente y configurar configuraciones locales para OCO_EMOJI
y OCO_DESCRIPTION
por repositorio, lo cual es más conveniente.
Simplemente configure cualquiera de las variables anteriores de esta manera:
oco config set OCO_MODEL=gpt-4o-mini
Configure GitMoji para presentar un mensaje.
oco config set OCO_EMOJI=true
Para eliminar emojis de prefacio:
oco config set OCO_EMOJI=false
Otras opciones de configuración se comportan igual.
Puede establecer la configuración OCO_WHY
en true
para que OpenCommit genere una breve descripción de POR QUÉ se realizaron los cambios después del mensaje de confirmación. El valor predeterminado es false
.
Para que esto sea preciso, debemos almacenar "lo que hacen los archivos" en algún tipo de índice o incrustación y realizar una búsqueda (una especie de RAG) para obtener el mensaje de confirmación de git preciso. Si tiene ganas de construir este comentario en este ticket #398 y avancemos juntos desde allí.
oco config set OCO_WHY=true
De forma predeterminada, OpenCommit utiliza el modelo gpt-4o-mini
.
¿Puedes cambiar a gpt-4o, que funciona mejor, pero cuesta más?
oco config set OCO_MODEL=gpt-4o
o como opción más económica:
oco config set OCO_MODEL=gpt-3.5-turbo
Por defecto, OpenCommit utiliza OpenAI.
Puede cambiar al servicio Azure OpenAI, Flowise u 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 el idioma utilizado para generar mensajes de confirmación:
# 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
La configuración de idioma predeterminada es inglés. Todos los idiomas disponibles se enumeran actualmente en la carpeta i18n.
Un mensaje para presionar a git está activado de forma predeterminada, pero si desea desactivarlo, simplemente use:
oco config set OCO_GITPUSH=false
y saldrá inmediatamente después de que se confirme la confirmación sin preguntar si desea pasar al control remoto.
@commitlint
OpenCommit le permite elegir el módulo de solicitud utilizado para generar mensajes de confirmación. De forma predeterminada, OpenCommit utiliza su generador de mensajes de confirmación convencional. Sin embargo, puede pasar a utilizar el módulo de aviso @commitlint
si lo prefiere. Esta opción le permite generar mensajes de confirmación con respecto a la configuración local.
Puede configurar esta opción ejecutando el siguiente comando:
oco config set OCO_PROMPT_MODULE= < module >
Reemplace <module>
con conventional-commit
o @commitlint
.
Para pasar a utilizar el módulo de aviso '@commitlint
, ejecute:
oco config set OCO_PROMPT_MODULE=@commitlint
Para volver al generador de mensajes de confirmación convencional predeterminado, ejecute:
oco config set OCO_PROMPT_MODULE=conventional-commit
@commitlint
La integración entre @commitlint
y OpenCommit se realiza automáticamente la primera vez que se ejecuta OpenCommit con OCO_PROMPT_MODULE
configurado en @commitlint
. Sin embargo, si necesita forzar el establecimiento o restablecer la configuración de @commitlint
, puede ejecutar el siguiente comando:
oco commitlint force
Para ver la configuración generada para @commitlint
, puede usar este comando:
oco commitlint get
Esto le permite asegurarse de que la configuración esté configurada como desee.
Además, la integración crea un archivo llamado .opencommit-commitlint
que contiene los mensajes utilizados para la configuración local @commitlint
. Puede modificar este archivo para ajustar el mensaje de confirmación de ejemplo generado por OpenAI. Esto le brinda la flexibilidad de realizar ajustes según sus preferencias o pautas del proyecto.
OpenCommit genera un archivo llamado .opencommit-commitlint
en el directorio de su proyecto que contiene las indicaciones utilizadas para la configuración @commitlint
local. Puede modificar este archivo para ajustar el mensaje de confirmación de ejemplo generado por OpenAI. Si la configuración local @commitlint
cambia, este archivo se actualizará la próxima vez que se ejecute OpenCommit.
Esto le ofrece un mayor control sobre los mensajes de confirmación generados, lo que permite una personalización que se alinea con las convenciones de su proyecto.
Los comandos opencommit
u oco
se pueden usar en lugar del comando git commit -m "${generatedMessage}"
. Esto significa que cualquier indicador normal que se use con el comando git commit
también se aplicará cuando se use opencommit
u oco
.
oco --no-verify
se traduce a:
git commit -m " ${generatedMessage} " --no-verify
Para incluir un mensaje en el mensaje generado, puede utilizar la función de plantilla, por ejemplo:
oco ' #205: $msg’
opencommit examina los marcadores de posición en los parámetros, lo que le permite agregar información adicional antes y después de los marcadores de posición, como el problema o la solicitud de extracción correspondiente. De manera similar, tiene la opción de personalizar el elemento de configuración OCO_MESSAGE_TEMPLATE_PLACEHOLDER, por ejemplo, simplificándolo a $m!"
La función OCO_MESSAGE_TEMPLATE_PLACEHOLDER
en la herramienta opencommit
permite a los usuarios incrustar un mensaje personalizado dentro del mensaje de confirmación generado utilizando una función de plantilla. Esta configuración está diseñada para mejorar la flexibilidad y la personalización de los mensajes de confirmación, lo que facilita a los usuarios incluir información relevante directamente dentro de sus confirmaciones.
En nuestro código base, la implementación de esta característica se puede encontrar en el siguiente segmento:
commitMessage = messageTemplate . replace (
config . OCO_MESSAGE_TEMPLATE_PLACEHOLDER ,
commitMessage
) ;
Esta línea es responsable de reemplazar el marcador de posición en messageTemplate
con el commitMessage
real.
Por ejemplo, utilizando el comando oco '$msg #205'
, los usuarios pueden aprovechar esta función. El código proporcionado representa la mecánica de backend de dichos comandos, lo que garantiza que el marcador de posición se reemplace con el mensaje de confirmación apropiado.
Una vez que los usuarios hayan generado el mensaje de confirmación deseado, pueden proceder a confirmar utilizando el mensaje generado. Al comprender todo el potencial de la función y los detalles de su implementación, los usuarios pueden utilizar con confianza los mensajes generados para sus confirmaciones.
Puede eliminar archivos para que no se envíen a OpenAI creando un archivo .opencommitignore
. Por ejemplo:
path/to/large-asset.zip
**/*.jpg
Esto ayuda a evitar que opencommit cargue artefactos y archivos grandes.
De forma predeterminada, opencommit ignora los archivos que coinciden: *-lock.*
y *.lock
Puede configurar OpenCommit como gancho Git prepare-commit-msg
. Hook se integra con su IDE Source Control y le permite editar el mensaje antes de confirmarlo.
Para configurar el gancho:
oco hook set
Para desarmar el gancho:
oco hook unset
Para usar el gancho:
git add < files... >
git commit
O siga el proceso de la función de control de código fuente de su IDE, cuando llame al comando git commit
: OpenCommit se integrará en el flujo.
¡OpenCommit ahora está disponible como una acción de GitHub que mejora automáticamente todos los mensajes de confirmación nuevos cuando pasas a control remoto!
Esto es excelente si desea asegurarse de que todas las confirmaciones en todas las ramas de su repositorio sean significativas y no aburridas como fix1
o done2
.
Cree un archivo .github/workflows/opencommit.yml
con el siguiente contenido:
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
Eso es todo. Ahora, cuando ingresa a cualquier rama de su repositorio, su IA nunca cansada mejora todas las NUEVAS confirmaciones.
Asegúrese de excluir las ramas de colaboración pública ( main
, dev
, etc
) en branches-ignore
, para que OpenCommit no rebase las confirmaciones allí mientras mejora los mensajes.
La rebase interactiva ( rebase -i
) cambia el SHA de las confirmaciones, por lo que el historial de confirmaciones en el control remoto se vuelve diferente del historial de la sucursal local. Esto está bien si trabaja solo en la sucursal, pero puede resultar inconveniente para otros colaboradores.
Usted paga por sus solicitudes a la API de OpenAI por su cuenta.
OpenCommit almacena su clave localmente.
OpenCommit utiliza de forma predeterminada el modelo 3,5 turbo, no debe exceder los 0,10 dólares por día laboral informal.
Puedes cambiar a gpt-4, es mejor, pero más caro.