Opa galera, tudo tranquilo?
Hoje vamos falar de boas práticas para te tornar um(a) desenvolvedor(a) melhor, focando em uma ação que faz parte do dia-a-dia de todo desenvolvedor, o commit.
Segundo a própria documentação do Conventional Commits, 'é uma convenção simples para utilizar nas mensagens de commit. Ela define um conjunto de regras para criar um histórico de commit explícito, o que facilita a criação de ferramentas automatizadas. Esta convenção segue o SemVer, descrevendo os recursos, correções e modificações que quebram a compatibilidade nas mensagens de commit'.
A mensagem do commit deve ser estruturada da seguinte forma:
<tipo>[escopo opcional]: <descrição>
[corpo opcional]
[rodapé opcional]
Além dessa estrutura, o commit possui outros elementos estruturais.
fix
- Commits do tipo fix indicam que seu trecho de código commitado está solucionando um problema (bug fix), (se relaciona com o PATCH do versionamento semântico).feat
- Commits do tipo feat indicam que seu trecho de código está incuindo um novo recurso (se relaciona com o MINOR do versionamento semântico).docs
- Commits do tipo docs indicam que houveram mudanças na documentação, como por exemplo no Readme do seu repositório. (Não inclui alterações em código).style
- Commits do tipo style indicam que houveram alterações referentes a formatações de código, semicolons, trailing spaces, lint... (Não inclui alterações em código).refactor
- Commits do tipo refactor referem-se a mudanças devido a refatorações que não alterem sua funcionalidade, como por exemplo, uma alteração no formato como é processada determinada parte da tela, mas que manteve a mesma funcionalidade, ou melhorias de performance devido a um code review.build
- Commits do tipo build são utilizados quando são realizadas modificações em arquivos de build e dependências.test
- Commits do tipo test são utilizados quando são realizadas alterações em testes, seja criando, alterando ou excluindo testes unitários. (Não inclui alterações em código)chore
- Commits do tipo chore indicam atualizações de tarefas de build, configurações de administrador, pacotes... como por exemplo adicionar um pacote no gitignore. (Não inclui alterações em código)BREAKING CHANGE
- Commits que possuem o texto BREAKING CHANGE no começo do corpo ou no rodapé, indicam que a modificação que está sendo realizada no commit, possui uma modificiação que quebra a compatibilidade da API, (se relaciona com o MAJOR do versionamento semântico).O corpo, o escopo e rodapé compôem o esqueleto de um commit semântico, e todos os três são opcionais.
O corpo é indicado para quando o detalhamento do seu commit for maior que 7 palavras.
Exemplo:
feat: adicionado a nova estrutura de pastas do frontend
- Foi realizada uma mudança em toda a estruturação de páginas do projeto frontend, pois agora iremos utilizar determinado modelo
Com o escopo iremos informar a parte do código que foi modificada. Pode ser o nome de um componente, uma determinada propriedade da API ou o nome da API, uma função...
Exemplo:
fix(ProdutoApi): retirando variável do path da API e ajustando loggers
- O path anterior tinha variáveis desnecessárias e não utilizadas
No rodapé geralmente são informados uma issue, id ou tasks de atividades, que foram utilizadas para realizar a alteração desse trecho de código commitado.
Exemplo de commit com escopo, corpo e rodapé:
fix: corrige pequenos erros de digitação no código
veja o ticket para detalhes sobre os erros de digitação corrigidos
originado da issue JD#12
É recomendado que você proceda como se já tivesse lançado o produto. Normalmente alguém, mesmo que seja seus colegas desenvolvedores, está usando seu software. Eles vão querer saber o que foi corrigido, o que quebrou etc.
Qualquer opção pode ser usada, mas é melhor ser consistente. Eu particularmente prefiro commitar com letras minúsculas
Volte e faça vários commits sempre que possível. Parte do benefício do Conventional Commits é a capacidade de nos levar a fazer commits e PRs mais organizados.
Desencoraja a movimentação rápida de forma desorganizada. Ele ajuda você a ser capaz de se mover rapidamente a longo prazo em vários projetos com vários colaboradores.
php-commitizen
: uma ferramenta para criar mensagens de commit seguindo as especificações do Conventional Commits. Configurável e util para projetos PHP como dependência do composer ou “global” para projetos não-PHP.conform
: uma ferramenta que pode ser usada para garantir “regras” em repositórios git, incluindo o Conventional Commits.
standard-version: Geração automática de versões e gerenciamento de CHANGELOG, usando o novo botão de squash do GitHub e o workflow recomendado do Conventional Commits.Por hoje é isso galera, espero que tenham curtido o tema e que a Coday possa ter ajudado vocês a evolouirem como desenvolvedores(as).
Se vocês tiverem quaisquer dúvidas relacionadas a commits mais semânticos, ou quiserem sugerir algum outro tema, deixem aqui nos comentários.