Tuer des commits boiteux avec l'IA ??
Tous les commits de ce dépôt sont rédigés par OpenCommit — regardez les commits pour voir comment fonctionne OpenCommit. Les émoticônes et les longues descriptions de commit sont configurables, pratiquement tout l'est.
Vous pouvez utiliser OpenCommit en l'exécutant simplement via la CLI comme ceci oco
. 2 secondes et vos modifications par étapes sont validées avec un message significatif.
Installez OpenCommit globalement pour l'utiliser dans n'importe quel référentiel :
npm install -g opencommit
Obtenez votre clé API auprès d'OpenAI ou d'autres fournisseurs LLM pris en charge (nous les prenons tous en charge). Assurez-vous d'ajouter vos informations de paiement OpenAI à votre compte pour que l'API fonctionne.
Définissez la clé sur la configuration OpenCommit :
oco config set OCO_API_KEY= < your_api_key >
Votre clé API est stockée localement dans le fichier de configuration ~/.opencommit
.
Vous pouvez appeler OpenCommit avec la commande oco
pour générer un message de validation pour vos modifications par étapes :
git add < files... >
oco
L'exécution git add
est facultative, oco
le fera pour vous.
Vous pouvez également l'exécuter avec un modèle local via ollama :
ollama run mistral
(faites-le une seule fois, pour tirer le modèle)git add < files... >
oco config set OCO_AI_PROVIDER= ' ollama ' OCO_MODEL= ' llama3:8b '
Le modèle par défaut est mistral
.
Si vous avez ollama configuré dans docker/ sur une autre machine avec des GPU (pas localement), vous pouvez modifier l'URL du point de terminaison par défaut.
Vous pouvez le faire en définissant la variable d'environnement OCO_API_URL
comme suit :
oco config set OCO_API_URL= ' http://192.168.1.10:11434/api/chat '
où 192.168.1.10 est un exemple d'URL de point de terminaison, où ollama est configuré.
Il existe plusieurs indicateurs facultatifs qui peuvent être utilisés avec la commande oco
:
Lien vers la spécification GitMoji : https://gitmoji.dev/
Cet indicateur ne peut être utilisé que si l'élément de configuration OCO_EMOJI
est défini sur true
. Cet indicateur permet aux utilisateurs d'utiliser tous les emojis de la spécification GitMoji. Par défaut, la spécification complète de GitMoji est définie sur false
, qui n'inclut que 10 emojis (?✅♻️⬆️?).
Cela est dû à la limitation du nombre de jetons envoyés dans chaque requête. Cependant, si vous souhaitez utiliser la spécification GitMoji complète, vous pouvez utiliser l'indicateur --fgm
.
oco --fgm
Cet indicateur permet aux utilisateurs de valider automatiquement les modifications sans avoir à confirmer manuellement le message de validation. Ceci est utile pour les utilisateurs qui souhaitent rationaliser le processus de validation et éviter des étapes supplémentaires. Pour utiliser cet indicateur, vous pouvez exécuter la commande suivante :
oco --yes
Créez un fichier .env
et ajoutez-y des variables de configuration OpenCommit comme ceci :
...
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>
Les configurations globales sont identiques aux configurations locales, mais elles sont stockées dans le fichier de configuration global ~/.opencommit
et définies avec la commande oco config set
, par exemple oco config set OCO_MODEL=gpt-4o
.
La configuration locale a toujours plus de priorité que la configuration globale, mais vous pouvez définir OCO_MODEL
et OCO_LOCALE
globalement et définir les configurations locales pour OCO_EMOJI
et OCO_DESCRIPTION
par dépôt, ce qui est plus pratique.
Définissez simplement l'une des variables ci-dessus comme ceci :
oco config set OCO_MODEL=gpt-4o-mini
Configurez GitMoji pour préfacer un message.
oco config set OCO_EMOJI=true
Pour supprimer les émojis de préface :
oco config set OCO_EMOJI=false
Les autres options de configuration se comportent de la même manière.
Vous pouvez définir la configuration OCO_WHY
sur true
pour qu'OpenCommit affiche une brève description du POURQUOI les modifications ont été effectuées après le message de validation. La valeur par défaut est false
.
Pour que cela soit précis, nous devons stocker « ce que font les fichiers » dans une sorte d'index ou d'intégration et effectuer une recherche (un peu RAG) pour le message de validation git précis. Si vous avez envie de construire ce commentaire sur ce ticket #398 et partons de là ensemble.
oco config set OCO_WHY=true
Par défaut, OpenCommit utilise le modèle gpt-4o-mini
.
Vous pouvez passer à gpt-4o qui est plus performant, mais coûte plus cher ?
oco config set OCO_MODEL=gpt-4o
ou comme option moins chère :
oco config set OCO_MODEL=gpt-3.5-turbo
Par défaut, OpenCommit utilise OpenAI.
Vous pouvez passer à 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 >
Pour spécifier globalement la langue utilisée pour générer les messages de validation :
# 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
Le paramètre de langue par défaut est l'anglais. Toutes les langues disponibles sont actuellement répertoriées dans le dossier i18n.
Une invite pour pousser vers git est activée par défaut, mais si vous souhaitez la désactiver, utilisez simplement :
oco config set OCO_GITPUSH=false
et il se fermera juste après la confirmation de la validation sans vous demander si vous souhaitez pousser vers la télécommande.
@commitlint
OpenCommit vous permet de choisir le module d'invite utilisé pour générer les messages de validation. Par défaut, OpenCommit utilise son générateur de messages de validation conventionnel. Cependant, vous pouvez utiliser le module d'invite @commitlint
si vous préférez. Cette option vous permet de générer des messages de validation en respectant la configuration locale.
Vous pouvez définir cette option en exécutant la commande suivante :
oco config set OCO_PROMPT_MODULE= < module >
Remplacez <module>
par conventional-commit
ou @commitlint
.
Pour passer à l'utilisation du module d'invite '@commitlint
, exécutez :
oco config set OCO_PROMPT_MODULE=@commitlint
Pour revenir au générateur de messages de validation conventionnel par défaut, exécutez :
oco config set OCO_PROMPT_MODULE=conventional-commit
@commitlint
L'intégration entre @commitlint
et OpenCommit se fait automatiquement la première fois qu'OpenCommit est exécuté avec OCO_PROMPT_MODULE
défini sur @commitlint
. Cependant, si vous devez forcer ou réinitialiser la configuration de @commitlint
, vous pouvez exécuter la commande suivante :
oco commitlint force
Pour afficher la configuration générée pour @commitlint
, vous pouvez utiliser cette commande :
oco commitlint get
Cela vous permet de vous assurer que la configuration est configurée comme vous le souhaitez.
De plus, l'intégration crée un fichier nommé .opencommit-commitlint
qui contient les invites utilisées pour la configuration @commitlint
locale. Vous pouvez modifier ce fichier pour affiner l'exemple de message de validation généré par OpenAI. Cela vous donne la flexibilité de procéder à des ajustements en fonction de vos préférences ou des directives du projet.
OpenCommit génère un fichier nommé .opencommit-commitlint
dans le répertoire de votre projet qui contient les invites utilisées pour la configuration locale @commitlint
. Vous pouvez modifier ce fichier pour affiner l'exemple de message de validation généré par OpenAI. Si la configuration locale @commitlint
change, ce fichier sera mis à jour lors de la prochaine exécution d'OpenCommit.
Cela vous offre un meilleur contrôle sur les messages de validation générés, permettant une personnalisation conforme aux conventions de votre projet.
Les commandes opencommit
ou oco
peuvent être utilisées à la place de la commande git commit -m "${generatedMessage}"
. Cela signifie que tous les indicateurs réguliers utilisés avec la commande git commit
seront également appliqués lors de l'utilisation de opencommit
ou oco
.
oco --no-verify
se traduit par :
git commit -m " ${generatedMessage} " --no-verify
Pour inclure un message dans le message généré, vous pouvez utiliser la fonction modèle, par exemple :
oco ' #205: $msg’
opencommit examine les espaces réservés dans les paramètres, vous permettant d'ajouter des informations supplémentaires avant et après les espaces réservés, telles que le problème ou la demande d'extraction concernée. De même, vous avez la possibilité de personnaliser l'élément de configuration OCO_MESSAGE_TEMPLATE_PLACEHOLDER, par exemple en le simplifiant à $m!"
La fonctionnalité OCO_MESSAGE_TEMPLATE_PLACEHOLDER
de l'outil opencommit
permet aux utilisateurs d'intégrer un message personnalisé dans le message de validation généré à l'aide d'une fonction de modèle. Cette configuration est conçue pour améliorer la flexibilité et la personnalisation des messages de validation, permettant ainsi aux utilisateurs d'inclure plus facilement des informations pertinentes directement dans leurs validations.
Dans notre base de code, l'implémentation de cette fonctionnalité se trouve dans le segment suivant :
commitMessage = messageTemplate . replace (
config . OCO_MESSAGE_TEMPLATE_PLACEHOLDER ,
commitMessage
) ;
Cette ligne est chargée de remplacer l'espace réservé dans le messageTemplate
par le commitMessage
réel.
Par exemple, en utilisant la commande oco '$msg #205'
, les utilisateurs peuvent exploiter cette fonctionnalité. Le code fourni représente la mécanique backend de ces commandes, garantissant que l'espace réservé est remplacé par le message de validation approprié.
Une fois que les utilisateurs ont généré le message de validation souhaité, ils peuvent procéder à la validation en utilisant le message généré. En comprenant tout le potentiel de la fonctionnalité et les détails de sa mise en œuvre, les utilisateurs peuvent utiliser en toute confiance les messages générés pour leurs commits.
Vous pouvez supprimer les fichiers envoyés à OpenAI en créant un fichier .opencommitignore
. Par exemple:
path/to/large-asset.zip
**/*.jpg
Cela permet d'empêcher opencommit de télécharger des artefacts et des fichiers volumineux.
Par défaut, opencommit ignore les fichiers correspondant : *-lock.*
et *.lock
Vous pouvez définir OpenCommit comme hook Git prepare-commit-msg
. Hook s'intègre à votre contrôle de source IDE et vous permet de modifier le message avant de le valider.
Pour fixer le crochet :
oco hook set
Pour détacher le crochet :
oco hook unset
Pour utiliser le crochet :
git add < files... >
git commit
Ou suivez le processus de votre fonctionnalité de contrôle de source IDE, lorsqu'elle appelle la commande git commit
- OpenCommit s'intégrera dans le flux.
OpenCommit est désormais disponible en tant qu'action GitHub qui améliore automatiquement tous les nouveaux messages de validation lorsque vous les transmettez à distance !
C'est très bien si vous voulez vous assurer que tous les commits dans toutes les branches de votre référentiel sont significatifs et non boiteux comme fix1
ou done2
.
Créez un fichier .github/workflows/opencommit.yml
avec le contenu ci-dessous :
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
C'est tout. Désormais, lorsque vous poussez vers n'importe quelle branche de votre dépôt, tous les NOUVEAUX commits sont améliorés par votre IA infatigable.
Assurez-vous d'exclure les branches de collaboration publiques ( main
, dev
, etc
) dans branches-ignore
, afin qu'OpenCommit ne rebase pas les commits tout en améliorant les messages.
Le rebase interactif ( rebase -i
) modifie le SHA des commits, de sorte que l'historique des commits à distance devient différent de l'historique de votre branche locale. Ce n'est pas grave si vous travaillez seul sur la branche, mais cela peut être gênant pour les autres collaborateurs.
Vous payez vous-même vos requêtes auprès de l’API OpenAI.
OpenCommit stocke votre clé localement.
OpenCommit utilise par défaut le modèle 3,5-turbo, il ne doit pas dépasser 0,10 $ par jour ouvrable occasionnel.
Vous pouvez passer à gpt-4, c'est mieux, mais plus cher.