Como fazer um commit - Conventional Commits

git 29 de Mar de 2023

Commits padronizados servem para ajudar você e sua equipe a entender melhor o que foi feito no desenvolvimento

*  Texto de Gustavo Henrique da Silva,
Application Development Analyst na Accenture


One future | Evento online e gratuito de programação | Rocketseat
Descubra como ganhar tempo para acelerar na sua carreira em programação através de uma oportunidade nunca antes vista e celebre o aniversário da Rocketseat junto a comunidade.

Já precisou entrar no seu github para procurar noscommits qualquer alteração que tenha feito e se deparou com algo mais ou menos assim?

No início eu não sabia que existiam boas práticas para escrever um commit, então acabava escrevendo desse jeito: “Start”, “Melhorias” e  “Update”. Sempre que precisava buscar algo, ficava perdido, sem achar as alterações que queria. Isso aconteceu até eu descobrir o Conventional Commits.

One future | Evento online e gratuito de programação | Rocketseat
Descubra como ganhar tempo para acelerar na sua carreira em programação através de uma oportunidade nunca antes vista e celebre o aniversário da Rocketseat junto a comunidade.

O que é Conventional Commits?

Conventional commits é um padrão de escrita de mensagens de commit que segue uma estrutura específica para facilitar a geração de changelogs automatizados, melhorar a comunicação entre desenvolvedores e ajudar a manter o histórico do repositório organizado.

Esse padrão está alinhado com o semver (semantic versioning), descrevendo recursos (features), correções (fixes) e alterações (changes) efetuadas nos commits. Entre os benefícios desse padrão, podemos citar:

  • Criação automatizada de CHANGELOGs
  • Histórico estruturado
  • Facilita a criação de relatórios
  • Facilita a entrada de novos desenvolvedores
  • Facilita a comunicação entre os desenvolvedores

Como usar o padrão

O padrão é baseado em um prefixo específico (tipo), um escopo opcional, um espaço em branco, uma mensagem curta, uma descrição detalhada opcional e um rodapé, ficando da seguinte forma:

TIPO: [DESCRIÇÃO_DO_COMMIT]

[

CORPO_DO_COMMIT

]

[RODAPE_DO_COMMIT}

Tipos

Os prefixos em "Conventional Commits" são labels utilizadas para identificar o tipo de mudança feita em um commit. O objetivo dos prefixos é fornecer uma maneira padronizada de identificar o tipo de mudança em um repositório, o que pode ser útil para equipes de desenvolvimento de software. Aqui você pode conferir alguns dos tipos existentes:

Feat
Cria um novo recurso no código.

Fix
Corrige um bug no código.

Style
Mudanças que não afetam o significado do código (espaço em branco, formatação falta de ponto-e-vírgula, etc).

Refactor
Uma alteração que não corrige um bug, nem adiciona um novo recurso.

Test
Adicionando testes ausentes ou corrigindo testes existentes.

Docs
Apenas a documentação.

Chore
Alterações no processo de compilação ou ferramentas e bibliotecas auxiliares, como geração de documentação.

Perf
Mudança de Código que melhora performance.

Build
Alterações que afetam o sistema de compilação ou dependências externas (npm, gulp, broccoli).

Ci
Alterações  em nossos arquivos e scripts de configuração de CI (Travis, Circle, github actions).

Exemplo:

feat

Escopo

O escopo do commit é uma parte opcional, curta e de fácil compreensão. É nela que iremos dizer qual parte do código foi modificada e como indicar que fizemos alterações apenas na camada de Client de um serviço.

Exemplo:

feat(usuario):

Descrição

A descrição, juntamente com o tipo, é uma das partes mais importantes do padrão: é aqui que deve ser descrito, de maneira clara, sucinta e simplificada, o que foi realizado no commit. É recomendado que essa parte tenha, no máximo, 70 caracteres, para que não se estenda muito.

One future | Evento online e gratuito de programação | Rocketseat
Descubra como ganhar tempo para acelerar na sua carreira em programação através de uma oportunidade nunca antes vista e celebre o aniversário da Rocketseat junto a comunidade.

Exemplo:

feat(usuario): criação da tela de login

Corpo

O corpo é a parte da mensagem de commit que fornece detalhes adicionais sobre as alterações feitas no código. Ele é opcional, mas é recomendado, especialmente quando as alterações são complexas ou precisam de contexto adicional. O corpo do commit deve ser escrito em uma ou mais linhas e deve fornecer informações suficientes para que outros desenvolvedores possam entender o que foi mudado e por quê.

A descrição curta e o corpo do commit, juntos, formam a mensagem de commit completa.

Exemplo:

feat(usuario): criação da tela de login	
- criação da tela
- validação do e-mail
- validação da senha

Rodapé

O rodapé também é uma parte opcional da mensagem de commit que pode ser usado para fornecer informações adicionais sobre as alterações feitas no código. Ele geralmente é colocado após o corpo da mensagem e é separado do corpo por uma linha em branco. O rodapé do commit pode ser usado para incluir informações como números de ticket de suporte, links para relatórios de bugs ou outros recursos relacionados.

Exemplo:

feat(usuario): criação da tela de login
- criação da tela
- validação do e-mail
validação da senha
Closes #123
One future | Evento online e gratuito de programação | Rocketseat
Descubra como ganhar tempo para acelerar na sua carreira em programação através de uma oportunidade nunca antes vista e celebre o aniversário da Rocketseat junto a comunidade.

Como praticar

Para facilitar a aplicação desse padrão existem ferramentas que podem te auxiliar bastante.

Husky
Cria um Hook para validar o commit com o CommitLint.

CommitLint
Tem como objetivo ajudar você e seu time a aderir o padrão convencional de commits validando o commit quando ele é efetuado.

Commitzen
Ajudar a escrever o commit com todas as informações necessárias, te ajudando a não esquecer nada.

Às vezes é um pouco chato instalar e configurar ferramentas. Por isso, criei um script que pode ser usado para criar o projeto do zero e configurar as três ferramentas.

Requisitos para executar o script:
Ter YARN instalado
Básico de Shel Script

Observação: o Yarn pode ser substituídos por NPM

Aqui você vai encontrar o script criado para configurar um repositório do zero com as ferramentas que comentei acima, assim você só vai precisar se preocupar em executar o comando.


Se você quiser saber um pouco mais, pode acessar as documentações utilizadas aqui:

E aí, o que achou ?

Espero que tenha gostado!

#NeverStopLearning

One future | Evento online e gratuito de programação | Rocketseat
Descubra como ganhar tempo para acelerar na sua carreira em programação através de uma oportunidade nunca antes vista e celebre o aniversário da Rocketseat junto a comunidade.

Marcadores