Repository: iuricode/padroes-de-commits
Branch: main
Commit: 7844cd0b3f0a
Files: 6
Total size: 22.9 KB
Directory structure:
gitextract_stifzxze/
├── CONTRIBUTING.md
├── LICENSE.md
├── README.md
├── commit-msg.sh
├── prepare-commit-msg.sh
└── push.sh
================================================
FILE CONTENTS
================================================
================================================
FILE: CONTRIBUTING.md
================================================
# Como contribuir?
Este é um projeto totalmente livre que aceita contribuições via pull requests no GitHub. Este documento tem a responsabilidade de alinhar as contribuições de acordo com os padrões estabelecidos no mesmo. Em caso de dúvidas, [abra uma issue](https://github.com/iuricode/padroes-de-commits/issues/new).
## Passos
1. Crie um fork deste repositório.
2. Envie seus commits em português.
3. Insira um pequeno resumo sobre o que foi adicionado.
4. Solicite um pull request.
## Recomendação (opcional)
Para uma melhor semântica nos commits, recomendamos utilizar os commits mencionados neste projeto open source. Assim ficará mais fácil para avaliar seu pull request.
================================================
FILE: LICENSE.md
================================================
#### Copyright © 2021 / [Iuri Silva](https://github.com/iuricode)
A permissão é concedida, gratuitamente, a qualquer pessoa que obtenha uma cópia deste arquivo, sem restrição nos direitos de usar, copiar, modificar e mesclar.
================================================
FILE: README.md
================================================
# Padrões de commits 📜
De acordo com a documentação do **[Conventional Commits](https://www.conventionalcommits.org/pt-br)**, commits semânticos são uma convenção simples para ser utilizada nas mensagens de commit. Essa convenção define um conjunto de regras para criar um histórico de commit explícito, o que facilita a criação de ferramentas automatizadas.
Esses commits auxiliarão você e sua equipe a entenderem de forma facilitada quais alterações foram realizadas no trecho de código que foi commitado.
Essa identificação ocorre por meio de uma palavra e emoji que identifica se aquele commit realizado se trata de uma alteração de código, atualização de pacotes, documentação, alteração de visual, teste...
## Tipo e descrição 🦄
O commit semântico possui os elementos estruturais abaixo (tipos), que informam a intenção do seu commit ao utilizador(a) de seu código.
- `feat`- Commits do tipo feat indicam que seu trecho de código está incluindo um **novo recurso** (se relaciona com o MINOR do versionamento semântico).
- `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).
- `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).
- `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)
- `build` - Commits do tipo build são utilizados quando são realizadas modificações em **arquivos de build e dependências**.
- `perf` - Commits do tipo perf servem para identificar quaisquer alterações de código que estejam relacionadas a **performance**.
- `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.
- `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)
- `ci` - Commits do tipo ci indicam mudanças relacionadas a **integração contínua** (_continuous integration_).
- `raw` - Commits do tipo raw indicam mudanças relacionadas a arquivos de configurações, dados, features, parâmetros.
- `cleanup` - Commits do tipo cleanup são utilizados para remover código comentado, trechos desnecessários ou qualquer outra forma de limpeza do código-fonte, visando aprimorar sua legibilidade e manutenibilidade.
- `remove` - Commits do tipo remove indicam a exclusão de arquivos, diretórios ou funcionalidades obsoletas ou não utilizadas, reduzindo o tamanho e a complexidade do projeto e mantendo-o mais organizado.
## 🛠️ Como instalar o arquivo `commit-msg.sh` para validar mensagens de commits com conventional commits
### Passo 1: Certifique-se de que o Git está instalado 🌟
Antes de tudo, verifique se o Git está instalado na sua máquina. Abra o terminal e execute:
```bash
git --version
```
Se você receber uma versão do Git como resposta, está tudo certo! Caso contrário, baixe e instale o Git aqui: [Git Downloads](https://git-scm.com/downloads).
### Passo 2: Localize o arquivo `commit-msg.sh` 📂
O arquivo `commit-msg.sh` deve estar disponível no repositório do seu projeto ou em um diretório específico. Certifique-se de que ele está acessível. Se não estiver, faça o download ou clone o repositório onde ele está localizado.
Por exemplo:
```bash
git clone https://github.com/seu-repositorio/projeto.git
cd projeto
```
### Passo 3: Crie o diretório `.git/hooks` (se ainda não existir) 📁
Os hooks do Git ficam no diretório `.git/hooks`. Verifique se ele existe no seu projeto:
```bash
ls -la .git/hooks
```
Se o diretório não existir, crie-o:
```bash
mkdir -p .git/hooks
```
### Passo 4: Copie o arquivo `commit-msg.sh` para o diretório `.git/hooks` 📋
Copie o arquivo `commit-msg.sh` para o diretório `.git/hooks` e renomeie-o para `commit-msg` (sem extensão):
```bash
cp caminho/para/commit-msg.sh .git/hooks/commit-msg
```
> **Nota:** Substitua `caminho/para/commit-msg.sh` pelo caminho real do arquivo.
### Passo 5: Dê permissão de execução ao script ✅
Para que o Git possa executar o script, você precisa dar permissão de execução:
```bash
chmod +x .git/hooks/commit-msg
```
### Passo 6: Teste o hook de commit 💻
Agora, tente fazer um commit no seu projeto. Por exemplo:
```bash
git add .
git commit -m "feat: adicionar funcionalidade xyz"
```
Se a mensagem de commit seguir o padrão **Conventional Commits**, o commit será aceito. Caso contrário, o hook irá bloquear o commit e exibir uma mensagem de erro.
### Passo 7: Personalize o script (opcional) 🎨
Se necessário, abra o arquivo `.git/hooks/commit-msg` em um editor de texto e personalize as regras de validação para atender às necessidades do seu projeto.
## Recomendações 🎉
- Adicione um tipo consistente com o título do conteúdo.
- Recomendamos que na primeira linha deve ter no máximo 4 palavras.
- Para descrever com detalhes, usar a descrição do commit.
- Usar um emoji no início da mensagem de commit representando sobre o commit.
- Os links precisam ser adicionados em sua forma mais autêntica, ou seja: sem encurtadores de link e links afiliados.
## Complementos de commits 💻
- **Rodapé:** informação sobre o revisor e número do card no Trello ou Jira. Exemplo: Reviewed-by: Elisandro Mello Refs #133
- **Corpo:** descrições mais precisas do que está contido no commit, apresentando impactos e os motivos pelos quais foram empregadas as alterações no código, como também instruções essenciais para intervenções futuras. Exemplo: see the issue for details on typos fixed.
- **Descrições:** uma descrição sucinta da mudança. Exemplo: correct minor typos in code
## Padrões de emojis 💈
| Tipo do commit |
Emoji |
Palavra-chave |
| Acessibilidade |
♿ :wheelchair: |
|
| Adicionando um teste |
✅ :white_check_mark: |
test |
| Atualizando a versão de um submódulo |
⬆️ :arrow_up: |
|
| Retrocedendo a versão de um submódulo |
⬇️ :arrow_down: |
|
| Adicionando uma dependência |
➕ :heavy_plus_sign: |
build |
| Alterações de revisão de código |
👌 :ok_hand: |
style |
| Animações e transições |
💫 :dizzy: |
|
| Bugfix |
🐛 :bug: |
fix |
| Comentários |
💡 :bulb: |
docs |
| Commit inicial |
🎉 :tada: |
init |
| Configuração |
🔧 :wrench: |
chore |
| Deploy |
🚀 :rocket: |
|
| Documentação |
📚 :books: |
docs |
| Em progresso |
🚧 :construction: |
|
| Estilização de interface |
💄 :lipstick: |
feat |
| Infraestrutura |
🧱 :bricks: |
ci |
| Lista de ideias (tasks) |
🔜 :soon: |
|
| Mover/Renomear |
🚚 :truck: |
chore |
| Novo recurso |
✨ :sparkles: |
feat |
| Package.json em JS |
📦 :package: |
build |
| Performance |
⚡ :zap: |
perf |
| Refatoração |
♻️ :recycle: |
refactor |
| Limpeza de Código |
🧹 :broom: |
cleanup |
| Removendo um arquivo |
🗑️ :wastebasket: |
remove |
| Removendo uma dependência |
➖ :heavy_minus_sign: |
build |
| Responsividade |
📱 :iphone: |
|
| Revertendo mudanças |
💥 :boom: |
fix |
| Segurança |
🔒️ :lock: |
|
| SEO |
🔍️ :mag: |
|
| Tag de versão |
🔖 :bookmark: |
|
| Teste de aprovação |
✔️ :heavy_check_mark: |
test |
| Testes |
🧪 :test_tube: |
test |
| Texto |
📝 :pencil: |
|
| Tipagem |
🏷️ :label: |
|
| Tratamento de erros |
🥅 :goal_net: |
|
| Dados |
🗃️ :card_file_box: |
raw |
## 💻 Exemplos
| Comando Git |
Resultado no GitHub |
git commit -m ":tada: Commit inicial"
|
🎉 Commit inicial |
git commit -m ":books: docs: Atualização do README"
|
📚 docs: Atualização do README |
git commit -m ":bug: fix: Loop infinito na linha 50"
|
🐛 fix: Loop infinito na linha 50 |
git commit -m ":sparkles: feat: Página de login"
|
✨ feat: Página de login |
git commit -m ":bricks: ci: Modificação no Dockerfile"
|
🧱 ci: Modificação no Dockerfile |
git commit -m ":recycle: refactor: Passando para arrow functions"
|
♻️ refactor: Passando para arrow functions |
git commit -m ":zap: perf: Melhoria no tempo de resposta"
|
⚡ perf: Melhoria no tempo de resposta |
git commit -m ":boom: fix: Revertendo mudanças ineficientes"
|
💥 fix: Revertendo mudanças ineficientes |
git commit -m ":lipstick: feat: Estilização CSS do formulário"
|
💄 feat: Estilização CSS do formulário |
git commit -m ":test_tube: test: Criando novo teste"
|
🧪 test: Criando novo teste |
git commit -m ":bulb: docs: Comentários sobre a função LoremIpsum( )"
|
💡 docs: Comentários sobre a função LoremIpsum( ) |
git commit -m ":card_file_box: raw: RAW Data do ano aaaa"
|
🗃️ raw: RAW Data do ano aaaa |
git commit -m ":broom: cleanup: Eliminando blocos de código comentados e variáveis não utilizadas na função de validação de formulário"
|
🧹 cleanup: Eliminando blocos de código comentados e variáveis não utilizadas na função de validação de formulário |
git commit -m ":wastebasket: remove: Removendo arquivos não utilizados do projeto para manter a organização e atualização contínua"
|
🗑️ remove: Removendo arquivos não utilizados do projeto para manter a organização e atualização contínua |
# Principais comandos do Git 📜
- `git clone url-do-repositorio-no-github` - Clona um repositório remoto existente no GitHub para o seu ambiente local.
- `git init` - Inicializa um novo repositório Git no diretório atual.
- `git add .` - Adiciona todos os arquivos e alterações no diretório atual para a área de stage (preparando-os para o commit).
- `git commit -m "mensagem do commit"` - Registra as alterações adicionadas na área de stage com uma mensagem descritiva sobre o que foi modificado.
- `git branch -M main` - Renomeia a branch atual (master) para main. O -M é usado para forçar a renomeação, movendo a branch se necessário.
- `git remote add origin https://github.com/usuario/nome-do-repositorio.git` - Adiciona um repositório remoto chamado origin ao repositório local. Use `https://github.com/usuario` para configurar o repositório remoto com HTTPS ou `git@github.com:usuario` para configurar com SSH.
- `git push -u origin main` - Envia os commits da branch main do repositório local para o repositório remoto origin e define main como a branch padrão para futuros push e pull. O -u (ou --set-upstream) configura a branch upstream para facilitar os próximos comandos git push e git pull e eliminar a necessidade de especificar a branch.
- `git remote add origin git@github.com:usuario/projeto.git` `git branch -M main` `git push -u origin main` - Quando você já tem um repositório local e quer conectá-lo a um repositório remoto no GitHub, adiciona o repositório remoto, renomeia a branch principal para main e envia os commits iniciais.
- `git fetch` - Busca todas as atualizações do repositório remoto sem integrá-las à branch atual. Isso atualiza as referências remotas.
- `git pull origin main` - Atualiza a branch local main com as mudanças do repositório remoto origin. Combina git fetch e git merge.
- `git push --force-with-lease` - Forma mais segura de forçar o envio de alterações locais para o repositório remoto. Verifica se não houve alterações feitas por outros colaboradores desde sua última atualização local, evitando sobrescrever acidentalmente o trabalho de outros.
- `git revert id_do_commit_que_vai_ser_revertido` - Cria um novo commit que desfaz as alterações feitas pelo commit especificado, preservando o histórico. Útil para desfazer mudanças de forma segura sem reescrever o histórico.
- `git reset --hard id_do_commit_anterior_ao_que_vai_ser_apagado` - Redefine o repositório para o estado do commit especificado, apagando todas as mudanças feitas após esse commit. Ideal para uso local. Para sincronizar remotamente, use `git push --force-with-lease` posteriormente.
- `git commit --amend -m "mensagem_reescrita"` - Altera a mensagem do último commit. Após usar este comando, sincronize remotamente com `git push --force-with-lease`.
- `git cherry-pick HASH_DO_COMMIT` - Utilizado para obter um commit específico. Exemplo de uso: Imagine que você tenha duas branchs (main) e (develop) e na segunda você tem 3 commits mas deseja apenas pegar o primeiro commit dela, com o uso de cherry-pick você pode.
- `git switch ` - Alterna para uma branch diferente no repositório local. Use `git switch -c ` para criar e alternar para uma nova branch.
# Glossário 📖
- `fork` - Cópia de um repositório para a sua própria conta no GitHub. Isso cria um novo repositório em sua conta que é independente do original, permitindo que você faça alterações sem afetar o repositório original.
- `issues` - Ferramenta usada para gerenciar tarefas, pedidos de novos recursos e correções de bugs em projetos de código aberto. As issues devem ser descritas e listadas, permitindo aos colaboradores discutirem e rastrearem o progresso das mesmas.
- `pull request` - Mecanismo usado para submeter alterações propostas ao repositório original. Um pull request é uma solicitação para que os mantenedores do projeto revisem e potencialmente incorporem as alterações. O pull request passará por um processo de avaliação e pode ser aceito ou rejeitado.
- `gist` - Ferramenta que permite o compartilhamento de trechos de código sem a necessidade de criar um repositório completo. Gists podem ser compartilhados publicamente ou de forma privada.
# Contribuição ✨
Ajude a comunidade tornando este projeto ainda mais incrível. Leia como contribuir clicando **[aqui](https://github.com/iuricode/padroes-de-commits/blob/main/CONTRIBUTING.md)** e a **[licença](https://github.com/iuricode/padroes-de-commits/blob/main/LICENSE.md)**. Estou convencido de que juntos alcançaremos coisas incríveis!
## Disponível para freelas - #OpenToWork 🚀
Atualmente estou aberto para oportunidades como Desenvolvedor Frontend e UI/UX Designer. Se você precisa de alguém para transformar ideias em interfaces bonitas, responsivas e funcionais, podemos trabalhar juntos!
📬 Entre em contato:
📧 iuricold99@gmail.com
💼 [Linkedin](https://www.linkedin.com/in/iuricode/)
================================================
FILE: commit-msg.sh
================================================
#!/usr/bin/env bash
# Path to the commit message file (provided by Git).
COMMIT_MSG_FILE=$1
# Read the commit message from the file.
COMMIT_MSG=$(cat "$COMMIT_MSG_FILE")
CONVENTIONAL_COMMIT_REGEX='^(feat|fix|docs|style|refactor|test|chore|build|ci|perf|revert)(\([a-zA-Z0-9_.-]+\))?(!)?:\s.*$'
# Check if the commit message matches the regex
if ! [[ $COMMIT_MSG =~ $CONVENTIONAL_COMMIT_REGEX ]]; then
echo "ERRO: A mensagem de commit não segue o formato do Conventional Commits."
echo
echo "O formato correto da mensagem de commit é obrigatório:"
echo " (): "
echo
echo "Os tipos válidos são:"
echo " feat: Uma nova funcionalidade."
echo " fix: Correção de um bug."
echo " docs: Alterações na documentação."
echo " style: Alterações de estilo de código (formatação, ponto-e-vírgula ausente, etc.)."
echo " refactor: Refatoração de código (nem corrige bug nem adiciona funcionalidade)."
echo " test: Adicionar ou atualizar testes."
echo " chore: Tarefas rotineiras como atualização de dependências ou ferramentas de build."
echo " build: Alterações que afetam o sistema de build ou dependências externas."
echo " ci: Alterações nos arquivos de configuração de CI ou scripts."
echo " perf: Melhorias de desempenho."
echo " revert: Reverter um commit anterior."
echo
echo "Exemplos:"
echo " feat(auth): adicionar funcionalidade de login"
echo " fix(api)!: resolver problema de timeout"
echo " docs(readme): atualizar instruções de instalação"
echo
exit 1
fi
exit 0
================================================
FILE: prepare-commit-msg.sh
================================================
#!/bin/sh
# Implemente o serviço em https://github.com/tiagolofi/ai-commit-hooks-api
# Mais detalhes em: https://github.com/tiagolofi/ai-commit-hooks
COMMIT_MSG_FILE=$1
GIT_DIFF=$(git diff --staged)
API_RESPONSE=$(
curl -X 'POST' \
'http://localhost:8080/commit/gpt-4o-mini' \
-H 'Token-Consumo: SEU_TOKEN_GERADO_NA_APLICACAO' \
-H 'Content-Type: text/plain' \
-d "$GIT_DIFF"
)
COMMIT=$(echo $API_RESPONSE | grep -oP '(?<="respostaGPT4oMini":")[^"]*')
echo "$COMMIT" > temp_msg
cat "$COMMIT_MSG_FILE" >> temp_msg # dê um " " na mensagem de commit
mv temp_msg "$COMMIT_MSG_FILE"
COMMIT_MSG=$(cat "$COMMIT_MSG_FILE")
if [[ -z "$COMMIT_MSG" || "$COMMIT_MSG" =~ ^[[:space:]]*$ ]]; then
exit 1 # erro: mensagem vazia
fi
================================================
FILE: push.sh
================================================
#!/bin/bash
# Script shell para facilitar a criacao de commits semanticos
echo "Selecione o tipo de commit:"
echo "1. feat: Novo recurso ✨"
echo "2. fix: Correção de bug 🐛"
echo "3. docs: Documentação 📚"
echo "4. test: Testes 🧪"
echo "5. build: Build ➕"
echo "6. perf: Performance ⚡"
echo "7. style: Estilo de código 🎨"
echo "8. refactor: Refatoração ♻️"
echo "9. chore: Tarefas 🔧"
echo "10. ci: Integração contínua 🧱"
echo "11. raw: Dados RAW 🗃️"
echo "12. cleanup: Limpeza de código 🧹"
echo "13. remove: Remoção de arquivos 🗑️"
echo ""
read -p "Digite o número correspondente ao tipo de commit: " commit_type
case $commit_type in
1) type="feat"; emoji="✨";;
2) type="fix"; emoji="🐛";;
3) type="docs"; emoji="📚";;
4) type="test"; emoji="🧪";;
5) type="build"; emoji="➕";;
6) type="perf"; emoji="⚡";;
7) type="style"; emoji="🎨";;
8) type="refactor"; emoji="♻️";;
9) type="chore"; emoji="🔧";;
10) type="ci"; emoji="🧱";;
11) type="raw"; emoji="🗃️";;
12) type="cleanup"; emoji="🧹";;
13) type="remove"; emoji="🗑️";;
*) echo "Tipo de commit inválido"; exit 1;;
esac
read -p "Digite a mensagem do commit: " message
commit_message="[$type] $emoji: $message"
git commit -a -m "$commit_message"
echo "Commit criado com sucesso: $commit_message"