I messaggi di commit in Git sono spesso trascurati. Molti li considerano solo un male necessario per salvare le modifiche. I messaggi di commit significativi sono un fattore decisivo per il successo di un progetto: assicurano una buona tracciabilità delle modifiche, una collaborazione efficiente tra i team e una risoluzione più rapida dei problemi. Non c'è motivo di avere i messaggi di commit preparati automaticamente con l'aiuto dell'AI.
Con l'aiuto dei cosiddetti. Ganci è possibile eseguire script, ad esempio per il test automatico o il controllo del codice per determinati eventi durante il flusso di lavoro di Git. Il lato client prepare-commit-msg-L'aggancio è immediato prima Il seguente script bash, ad esempio, deve essere eseguito nella cartella ~/git-template/hooks/prepare-commit-msg
essere archiviati:
0d311d3e3743f65bd1f7fa370c3b3848
Infine, si aggiunge il proprio Chiave API OpenAI nella riga 4 e, se desiderato, modifica il modello ChatGPT utilizzato nella riga 5 (nel nostro esempio gpt-4o
Poi rendiamo lo script eseguibile con chmod +x ~/git-template/hooks/prepare-commit-msg
e impostare con git config --global core.hooksPath ~/git-template/hooks
la cartella predefinita per gli hook di Git nella configurazione globale di Git.
Lo script genera per il file diff di tutti i file taggati crea automaticamente un modello adatto per il messaggio di commit: git add -A . && git commit
. In alternativa, si può anche inviare un messaggio vuoto ("."), che viene sovrascritto automaticamente: git add -A . && git commit -m "." && git push
– ma attenzione: la convalida del messaggio non è più possibile in questo caso.
I modelli di intelligenza artificiale sono ora così avanzati che vengono creati messaggi di commit automatici molto ragionevoli in base alle modifiche. Regolando il prompt (dalla riga 13) è possibile ottimizzare ulteriormente il ritorno. Per inciso, lo script funziona anche in strumenti Git UI come Torre e SmartGit. Se si desidera disattivare nuovamente il comportamento, è sufficiente premere il tasto git config --global --unset core.hooksPath
.