Escolar Documentos
Profissional Documentos
Cultura Documentos
Vitor DevSP
Posted on 15 de jun. de 2021
Introduzindo bibliotecas que tornarão seus históricos no Git mais padronizados e manuteníveis.
📌 Índice
Introdução
Commits atômicos
Padronização dos commits
Conventional Commits na prática
Semantic Versioning (Versionamento Semântico)
Commitlint
Husky
Commitizen
Instalando e configurando as bibliotecas
Instalando o commitlint
Instalando o husky
https://dev.to/vitordevsp/padronizacao-de-commit-com-commitlint-husky-e-commitizen-3g1n 1/18
08/02/2023 21:48 Padronização de commit com (Commitlint, Husky e Commitizen) - DEV Community 👩💻👨💻
Instalando o commitizen
Finalizando
✨ Introdução
Sem dúvidas uma das ferramentas mais importantes para uma pessoa desenvolvedora é o Git. Com essa
ferramenta conseguimos fazer o versionamento do nosso código, mantendo um histórico de todas as
alterações.
O Git cria uma linha do tempo das modificações feitas em nosso projeto e cada ponto nessa linha do tempo
é definido por um commit, que é o ato de empacotar aquelas alterações que foram feitas.
Ao criar um commit, sempre precisamos inserir uma mensagem para o mesmo, que de preferência seja
curta, objetiva e descritiva. Se você está aprendendo Git, sua maior preocupação não vai ser criar a melhor
mensagem para o seu commit, e nem deveria ser.
Em um primeiro momento, é interessante que você domine as funções básicas do Git, e depois disso dê o
próximo passo buscando entender práticas como commits atômicos e padronização das mensagens de
commits.
Iniciarei contextualizando sobre as práticas citadas e as bibliotecas que uso para fazer a padronização dos
commits e na sequência irei configurar a instalação e configuração das bibliotecas. Dessa maneira, fica mais
prático de revisitar o artigo e seguir o passo a passo para configurar futuros projetos.
✨ Commits atômicos
A prática de criar commits atômicos consiste em criar um commit para cada modificação no projeto, por
exemplo, vamos imaginar que estamos trabalhando em um projeto e fizemos duas ações:
https://dev.to/vitordevsp/padronizacao-de-commit-com-commitlint-husky-e-commitizen-3g1n 2/18
08/02/2023 21:48 Padronização de commit com (Commitlint, Husky e Commitizen) - DEV Community 👩💻👨💻
Em vez de criarmos um único commit para guardar as alterações que fizemos, faremos dois commits,
seguindo um padrão de commits atômicos. O primeiro commit será com os arquivos envolvidos na criação
do novo componente, e o segundo com as alterações feitas em um componente já existente.
Dessa maneira conseguimos escrever uma mensagem mais descritiva para o commit, as ações na linha do
tempo ficam mais descritivas e é mais prático de navegar pelos commits visualizando as modificações. Na
ocorrência de um bug no projeto, é bem mais fácil de encontrar em qual commit ele foi inserido e reverter o
que foi feito.
Quando iniciei os estudos com o Git, imaginei se existiria uma regra ou padrão a se seguir ao criar os
commits. Esse interesse se despertou a um tempo atrás, quando vi um vídeo no canal do Dev Soutinho
falando sobre isso, vou deixar o link para você conferir depois:
Como padronizar commits? #DevTips Conventional Commits + Semantic Release para releases e
versioning
Nesse vídeo, o Mario fala sobre o Conventional Commits, vou colar aqui um trecho de descrição do próprio
site: "Uma especificação para dar um significado legível às mensagens de commit para humanos e máquinas."
https://dev.to/vitordevsp/padronizacao-de-commit-com-commitlint-husky-e-commitizen-3g1n 3/18
08/02/2023 21:48 Padronização de commit com (Commitlint, Husky e Commitizen) - DEV Community 👩💻👨💻
Basicamente, o Conventional Commits é uma convenção que define um conjunto de regras para criar um
histórico de commit fácil de ler e padronizado. Essas regras são baseadas na Convenção que foi criada pelo
time de desenvolvimento do Angular e passou a ser amplamente utilizado pela comunidade.
OBS: Não existe só a convenção que o time do Angular criou, mas ela é uma das mais utilizadas. Vou deixar
o link aqui caso você tenha interesse em ler.
[corpo opcional]
[rodapé(s) opcional(is)]
A mensagem deve ser escrita com letras minúsculas, com um espaço entre o dois pontos e a descrição e
sem ponto final.
Geralmente eu escrevo apenas a primeira linha, vou colocar a lista com os tipos que podemos utilizar:
chore: Atualização de tarefas que não ocasionam alteração no código de produção, mas mudanças de
ferramentas, mudanças de configuração e bibliotecas.
feat: São adições de novas funcionalidades ou de quaisquer outras novas implantações ao código.
fix: Essencialmente definem o tratamento de correções de bugs.
refactor: Utilizado em quaisquer mudanças que sejam executados no código, porém não alterem a
funcionalidade final da tarefa impactada.
https://dev.to/vitordevsp/padronizacao-de-commit-com-commitlint-husky-e-commitizen-3g1n 4/18
08/02/2023 21:48 Padronização de commit com (Commitlint, Husky e Commitizen) - DEV Community 👩💻👨💻
Exemplos de Commits:
Dessa maneira fica muito mais fácil a leitura do histórico de commits e o entendimento do que foi feito no
código. Se você trabalha sozinho no projeto, experimente ficar 6 meses sem mexer no projeto. Com os
commits padronizados, ao voltar a mexer nele, fica muito mais fácil lembrar quais foram suas últimas
alterações.
https://dev.to/vitordevsp/padronizacao-de-commit-com-commitlint-husky-e-commitizen-3g1n 5/18
08/02/2023 21:48 Padronização de commit com (Commitlint, Husky e Commitizen) - DEV Community 👩💻👨💻
OBS: eu já fiquei perdido no meu próprio código em projetos mais antigos e isso acontece porque ao longo
do tempo evoluímos nosso código e adotamos novos hábitos de escrita, ao ponto de não reconhecermos
nosso próprio código de meses atrás.
Acabei resumindo o Conventional Commits focando na parte que é mais utilizada, mas separei o link da
convenção e de um artigo mais completo sobre o assunto, não deixe de ler:
Ele padroniza o versionamento das bibliotecas que usamos no dia a dia. Estudando-o, você entenderá o
porquê dos números que seguem o nome do pacote que você instalou no seu projeto, localizado no
arquivo package.json, por exemplo:
"dependencies": {
"@chakra-ui/react": "^1.6.2",
"@emotion/react": "^11",
"@emotion/styled": "^11",
"framer-motion": "^4",
"next": "10.2.3",
"react": "17.0.2",
"react-dom": "17.0.2"
}
https://dev.to/vitordevsp/padronizacao-de-commit-com-commitlint-husky-e-commitizen-3g1n 6/18
08/02/2023 21:48 Padronização de commit com (Commitlint, Husky e Commitizen) - DEV Community 👩💻👨💻
É muito importante pelo menos entender como funciona o Semantic Versioning, vai te ajudar em diversas
situações. Além disso, te ajudará a ter uma compreensão maior na hora de entender o lançamento de uma
biblioteca, a evitar uma versão que está com problemas ou entender quando o problema de uma biblioteca
foi resolvido. É um conhecimento que só tem a acrescentar na sua vida como dev.
✨ Commitlint
Entendemos o Conventional Commits, mas nada garante que vamos respeitar as regras impostas, pois,
mesmo trabalhando sozinho em um projeto, pode ser que esqueçamos de seguir o padrão que foi definido.
É ai que entra o commitlint, com ele conseguimos verificar se a mensagem de commit que escrevemos
realmente está dentro dos padrões pré definidos. Vamos usar os padrões do Angular, mas ele pode ser
alterado e podemos até mesmo criar o nosso próprio padrão.
Antes de fazermos um commit, vamos rodar a biblioteca para fazer essa verificação. Se a mensagem do
commit não estiver seguindo o padrão, será gerado um erro no terminal.
✨ Husky
O Husky vai nos ajudar a criarmos ganchos para o Git de uma maneira simples. Os ganchos são ações que
vão ser disparadas em determinados momentos. Nesse caso, vamos criar um gancho para ser disparado
antes de um commit ser inicializado.
Dessa maneira, sempre que fizermos um commit, vamos configurar o Husky para executar o Commitlint e
verificar se a mensagem do commit está seguindo os padrões recomendados.
Com isso, automatizamos o processo de verificação da mensagem e não precisamos nos preocupar em
rodá-lo manualmente. Mesmo com o Commitlint, pode ser que você esqueça de fazer a verificação e não
queremos que isso aconteça, mas dessa maneira nenhum commit com a mensagem errada vai passar.
https://dev.to/vitordevsp/padronizacao-de-commit-com-commitlint-husky-e-commitizen-3g1n 7/18
08/02/2023 21:48 Padronização de commit com (Commitlint, Husky e Commitizen) - DEV Community 👩💻👨💻
✨ Commitizen
Chegamos na última biblioteca que iremos utilizar.
O Commitizen é uma biblioteca que vai nos ajudar a criar os commits seguindo o padrão do Conventional
Commit. Ela gera uma interface no terminal e assim vamos conseguir acessar todos os tipos de commits e
suas descrições:
Ao adotar um novo padrão como estamos fazendo, precisamos de um tempo até decorarmos os tipos e não
precisar ficar consultando a documentação para conferir qual tipo usar. É aí que essa biblioteca vai nos
ajudar.
Iremos criar um script que podemos rodar sempre que quisermos fazer um commit guiado. Dessa maneira,
só precisamos seguir o passo a passo que a biblioteca implementa e geraremos um commit dentro do
padrão.
https://dev.to/vitordevsp/padronizacao-de-commit-com-commitlint-husky-e-commitizen-3g1n 8/18
08/02/2023 21:48 Padronização de commit com (Commitlint, Husky e Commitizen) - DEV Community 👩💻👨💻
Nem sempre vamos precisar usá-la, mas gosto de deixar instalada, pois se precisar é só executar o script.
Ou é só criar um projeto simples com o yarn ou npm, abrindo uma pasta no seu editor e rodando esse
comando no terminal:
yarn init -y
# ou
npm init -y
Com o projeto iniciado, podemos começar a instalar as bibliotecas, todas vão ser instaladas como
dependências de desenvolvimento, não vamos usá-las no ambiente de produção.
✨ Instalando o commitlint
Link para o site da biblioteca
https://dev.to/vitordevsp/padronizacao-de-commit-com-commitlint-husky-e-commitizen-3g1n 9/18
08/02/2023 21:48 Padronização de commit com (Commitlint, Husky e Commitizen) - DEV Community 👩💻👨💻
Caso você esteja no Windows e a segunda linha der erro, é só criar um arquivo com o nome:
commitlint.config.js
Podemos testar pra ver se deu tudo certo, o primeiro teste precisa gerar um erro porque não está seguindo
o padrão do Conventional Commits. O segundo teste deve passar.
✨ Instalando o husky
No site do commitlint vai ter as instruções para instalar o husky também, com yarn ou npm.
# instalando Husky v6
yarn add husky -D
# ativando os hooks
yarn husky install
https://dev.to/vitordevsp/padronizacao-de-commit-com-commitlint-husky-e-commitizen-3g1n 10/18
08/02/2023 21:48 Padronização de commit com (Commitlint, Husky e Commitizen) - DEV Community 👩💻👨💻
É muito importante criar o script de prepare no arquivo package.json, caso contrário, quando você ou outra
pessoa baixar o projeto do GitHub, o husky não vai funcionar, e então teria que rodar o comando yarn husky
install manualmente. Com o script, deixamos essa instalação automatizada.
# Agora vamos fazer o commit corretamente, nesse caso eu vou usar o tipo chore
# Por se tratar de uma configuração no ambiente de desenvolvimento
git commit -m "chore: add commitlint e husky"
✨ Instalando o commitizen
Link para o site da biblioteca
https://dev.to/vitordevsp/padronizacao-de-commit-com-commitlint-husky-e-commitizen-3g1n 11/18
08/02/2023 21:48 Padronização de commit com (Commitlint, Husky e Commitizen) - DEV Community 👩💻👨💻
# Instalando o commitizen
yarn add commitizen -D
# Criando a configuração
yarn commitizen init cz-conventional-changelog --yarn --dev --exact
Com a biblioteca instalada e configurada, vamos fazer um commit para entender o passo a passo que ela
traz na prática.
1) Select the type of change that you're committing: (Use arrow keys)
Selecione o tipo de mudança que você está realizando: (Use as teclas de seta)
https://dev.to/vitordevsp/padronizacao-de-commit-com-commitlint-husky-e-commitizen-3g1n 12/18
08/02/2023 21:48 Padronização de commit com (Commitlint, Husky e Commitizen) - DEV Community 👩💻👨💻
2) What is the scope of this change (e.g. component or file name): (press enter to skip)
Qual é o escopo desta mudança (por exemplo, componente ou nome do arquivo): (pressione Enter para
pular)
Em vez de colocar na mensagem do commit onde estava sendo feita a modificação, eu passei essa
informação no escopo e a mensagem ficou mais sucinta.
Utilizando o exemplo a cima, essa é a mensagem que sucede o dois pontos: obrigar o uso de aspas
duplas no jsx
Forneça uma descrição mais longa da mudança: (pressione Enter para pular)
Essa opção é opcional e geralmente eu não preencho, mas você pode inserir um contexto mais amplo
que descreve a modificação que foi feita.
A tradução não descreve bem essa opção, ela está ligada a quebra de compatibilidade estipulada pelo
Semantic Versioning, se tiver conhecimento sobre isso, vai saber a resposta, senão quer dizer que não
https://dev.to/vitordevsp/padronizacao-de-commit-com-commitlint-husky-e-commitizen-3g1n 13/18
08/02/2023 21:48 Padronização de commit com (Commitlint, Husky e Commitizen) - DEV Community 👩💻👨💻
OBS: Sempre que estiver trabalhando no terminal e ele mostrar duas opções, sendo uma delas maiúscula, se
pressionar enter ele seleciona a maiúscula que no caso é o N, ou você pode digitar N e pressionar enter.
Essa opção está ligada as Issues do GitHub, é uma opção mais avançada e não vou abordá-la nesse
artigo, é só pressionar enter.
Podemos digitar o comando git log no terminal para ver a lista com os últimos commits, e em primeiro
lugar vai estar o commit gerado pelo commitizen.
✨Finalizando
Uma nova prática não precisa e nem deve ser adotada de uma vez em todos os seus projetos. Faça um teste
de maneira gradual e analise se faz sentido para o seu contexto. Sempre começo testando algo novo em
projetos de estudos.
Uma outra prática interessante é escrever as mensagens dos commits em inglês. Atualmente tenho uma
certa dificuldade com o inglês, então prefiro fazer em português nos meus projetos pessoais, para ficar mais
claro quando for ler o histórico.
Espero que esse artigo tenha somado para você de alguma forma. Você pode entrar em contato comigo
para me passar um feedback ou trocar uma ideia pelo Linkedin ou Instagram. Deixarei também o meu
https://dev.to/vitordevsp/padronizacao-de-commit-com-commitlint-husky-e-commitizen-3g1n 14/18
08/02/2023 21:48 Padronização de commit com (Commitlint, Husky e Commitizen) - DEV Community 👩💻👨💻
otimo artigo, deu uma bela resumida na docs e criou um passo a passo bem direto.
Jucian0 • 9 de jun. de 22
Creio que seria legal usar o husky para usar o commitizen automaticamente ao digitar git commit
tambem.
npx husky add .husky/prepare-commit-msg "exec < /dev/tty && npx cz --hook || true"
https://dev.to/vitordevsp/padronizacao-de-commit-com-commitlint-husky-e-commitizen-3g1n 15/18
08/02/2023 21:48 Padronização de commit com (Commitlint, Husky e Commitizen) - DEV Community 👩💻👨💻
muito bom!
OtavioSC • 26 de jan. de 22
Ótimo artigo
https://dev.to/vitordevsp/padronizacao-de-commit-com-commitlint-husky-e-commitizen-3g1n 16/18
08/02/2023 21:48 Padronização de commit com (Commitlint, Husky e Commitizen) - DEV Community 👩💻👨💻
Excelente!
https://dev.to/vitordevsp/padronizacao-de-commit-com-commitlint-husky-e-commitizen-3g1n 17/18
08/02/2023 21:48 Padronização de commit com (Commitlint, Husky e Commitizen) - DEV Community 👩💻👨💻
Vitor DevSP
LOCATION
São Paulo, SP, Brasil
JOINED
8 de jun. de 2021
Meme Monday 🧢
#discuss #watercooler #jokes
https://dev.to/vitordevsp/padronizacao-de-commit-com-commitlint-husky-e-commitizen-3g1n 18/18