- Published on
Conventional Commits
- Authors
- Name
- Claudio Junior
- @ClaudioVsJunior
Segundo o Google, Convenção é:
acordo sobre determinada atividade, assunto etc., que obedece a entendimentos prévios e normas baseadas na experiência recíproca.
Partindo dessa definição, Conventional Commits nada mais são que um conjunto de convenções para a criação de mensagens de commits. Seguir uma convenção de commit - ou padrão - pode se traduzir em deixar outras pessoas rapidamente familiarizadas com o que houve naquele momento e quais os problemas, features e até mesmo Breaking Changes ocorreram a partir daquela alteração adiante.
As regras definidas nesta convenção auxiliam também na criação de ferramentas automatizadas, tais como geradores de CHANGELOG
, automatizadores de Release e outros toolings.
Anatomia de um Commit
Uma mensagem de commit deve seguir um padrão definido de anatomia, sendo ele:
<tipo>[escopo?]: <descrição>
[corpo da mensagem?]
[rodapé?]
onde cada um dos campos possuem funções específicas:
Tipo:
- feat (uma nova funcionalidade)
- fix (correção de bug)
- docs (alterações relacionadas a documentação do projeto)
- style (formatação de código, porém sem alteração)
- refactor (refatoração de funções ou métodos)
- test (alterações relacionadas a testes desde que não haja alteração de código da aplicação em si)
- chore (arquivos de configuração do projeto como
.gitignore
)
Escopo (Opcional):
Se destina a trazer uma informação rápida quando o commit se destina à um escopo específico, tais quais:
- init
- runner
- watcher
- config
- web-server
- proxy
- lang
- parser
- middleware
Descrição:
Ela deve ser breve e descrever em poucas palavras o que está acontecendo naquele commit. Outro detalhe importante é descrever no presente imperativo, como "change" e não "changed" ou "changes". Além de não ser necessário iniciar as sentenças com letras maiúsculas, assim como não é necessário colocar o ponto(.) no final da frase.
Corpo da Mensagem (Opcional):
Ela se geralmente se torna necessário utilizar o corpo da mensagem quando precisamos detalhar mais sobre as alterações realizadas no commit, porém em grande parte das vezes, apenas a descrição se torna necessária.
Rodapé (Optional):
O rodapé DEVE conter apenas informações adicionais ao commit, como link para o pull-request ou issue, ou até informar quando alguma modificação altera quebra alguma compatibilidade.
Isso é um breve resumo sobre o que seria a convenção de Commits, que teve toda sua especificação baseada em outra convenção, a Semantic Version (https://semver.org/).
Para mais informações e detalhamento sobre a especificação, segue um dos links oficiais do projeto: https://www.conventionalcommits.org/en/v1.0.0/.
E para adicionar essas convenção no seu projeto Javascript, existe uma lib ja pronta para seguir todas essas regras: https://github.com/conventional-changelog/commitlint/tree/master/%40commitlint/config-conventional
Espero que seja util, e até mais ver!