### Verificar Instalação do Git Source: https://github.com/iuricode/padroes-de-commits/blob/main/README.md Comando para verificar se o Git está instalado na máquina. Se o comando retornar uma versão, o Git está instalado. ```bash git --version ``` -------------------------------- ### Hook Git para Mensagens de Commit com IA (prepare-commit-msg.sh) Source: https://context7.com/iuricode/padroes-de-commits/llms.txt O script prepare-commit-msg.sh integra-se com uma API de IA (localmente hospedada) para gerar automaticamente mensagens de commit baseadas no diff das alterações staged. Este hook prepara a mensagem antes do usuário editar, utilizando um modelo de IA para sugerir uma descrição semântica. Requer a API rodando em http://localhost:8080 e um token de consumo. ```bash #!/bin/sh # Requer a API: https://github.com/tiagolofi/ai-commit-hooks-api COMMIT_MSG_FILE=$1 # Captura o diff das alterações staged GIT_DIFF=$(git diff --staged) # Envia o diff para a API de IA 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" ) # Extrai a mensagem sugerida da resposta COMMIT=$(echo $API_RESPONSE | grep -oP '(?<="respostaGPT4oMini":")[^" ``` -------------------------------- ### Script Interativo para Commits Semânticos (push.sh) Source: https://context7.com/iuricode/padroes-de-commits/llms.txt O script push.sh oferece uma interface interativa no terminal para criar commits semânticos de forma guiada. O usuário seleciona o tipo de commit através de um menu numerado e então digita a mensagem, resultando em um commit formatado automaticamente com emoji. Não possui dependências externas além do Git. ```bash #!/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 🗑️" 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="📚";; # ... outros tipos *) 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" # Exemplo de uso: # $ ./push.sh # Selecione o tipo de commit: # 1. feat: Novo recurso ✨ # ... # Digite o número correspondente ao tipo de commit: 1 # Digite a mensagem do commit: implementar autenticação JWT # Commit criado com sucesso: [feat] ✨: implementar autenticação JWT ``` -------------------------------- ### Test Git Commit Hook Source: https://github.com/iuricode/padroes-de-commits/blob/main/README.md Demonstrates how to stage changes and attempt a commit to verify if the configured hook correctly enforces the Conventional Commits standard. If the message format is invalid, the hook will block the commit. ```bash git add . git commit -m "feat: adicionar funcionalidade xyz" ``` -------------------------------- ### Exemplos de Tipos de Commits Semânticos (Bash) Source: https://context7.com/iuricode/padroes-de-commits/llms.txt Demonstra os diferentes tipos de commits semânticos definidos pelo Conventional Commits, como 'feat', 'fix', 'docs', etc., com exemplos de como utilizá-los em mensagens de commit Git. ```bash # feat - Novo recurso (MINOR no versionamento semântico) git commit -m "feat: adicionar sistema de autenticação OAuth" # fix - Correção de bug (PATCH no versionamento semântico) git commit -m "fix: corrigir loop infinito na validação de formulário" # docs - Mudanças na documentação git commit -m "docs: atualizar instruções de instalação no README" # test - Alterações em testes git commit -m "test: adicionar testes unitários para módulo de pagamento" # build - Modificações em arquivos de build e dependências git commit -m "build: atualizar versão do webpack para 5.0" # perf - Melhorias de performance git commit -m "perf: otimizar query de busca de usuários" # style - Formatações de código (sem alteração de lógica) git commit -m "style: aplicar formatação ESLint no projeto" # refactor - Refatorações que não alteram funcionalidade git commit -m "refactor: converter callbacks para async/await" # chore - Atualizações de tarefas de build e configurações git commit -m "chore: adicionar node_modules ao gitignore" # ci - Mudanças relacionadas a integração contínua git commit -m "ci: configurar GitHub Actions para deploy automático" # raw - Arquivos de configurações, dados e parâmetros git commit -m "raw: adicionar dados de configuração regional" # cleanup - Limpeza de código git commit -m "cleanup: remover código comentado e variáveis não utilizadas" # remove - Exclusão de arquivos ou funcionalidades obsoletas git commit -m "remove: excluir módulo legado de relatórios" ``` -------------------------------- ### Instalação do Git Hook de Validação (Bash) Source: https://context7.com/iuricode/padroes-de-commits/llms.txt Passos para instalar o script `commit-msg.sh` como um Git Hook em um repositório. Inclui a verificação da instalação do Git, criação do diretório de hooks, cópia do script, concessão de permissão de execução e testes com commits válidos e inválidos. ```bash # Passo 1: Verificar se o Git está instalado git --version # Saída esperada: git version 2.x.x # Passo 2: Verificar/criar diretório de hooks ls -la .git/hooks mkdir -p .git/hooks # Passo 3: Copiar o script para o diretório de hooks cp caminho/para/commit-msg.sh .git/hooks/commit-msg # Passo 4: Dar permissão de execução chmod +x .git/hooks/commit-msg # Passo 5: Testar o hook com um commit válido git add . git commit -m "feat: adicionar funcionalidade de login" # Resultado: Commit aceito ✓ # Teste com commit inválido git commit -m "adicionei login" # Resultado: ERRO: A mensagem de commit não segue o formato do Conventional Commits. ``` -------------------------------- ### Copiar e Renomear Script de Hook do Git Source: https://github.com/iuricode/padroes-de-commits/blob/main/README.md Comando para copiar o script `commit-msg.sh` para o diretório `.git/hooks` e renomeá-lo para `commit-msg`. Este script será executado antes de cada commit. ```bash cp caminho/para/commit-msg.sh .git/hooks/commit-msg ``` -------------------------------- ### Clonar Repositório Git Source: https://github.com/iuricode/padroes-de-commits/blob/main/README.md Comando para clonar um repositório Git de um URL especificado. Útil para obter arquivos de projeto, como scripts de commit. ```bash git clone https://github.com/seu-repositorio/projeto.git cd projeto ``` -------------------------------- ### Conceder Permissão de Execução ao Script de Hook Source: https://github.com/iuricode/padroes-de-commits/blob/main/README.md Comando para tornar o script de hook do Git executável. Isso é necessário para que o Git possa rodar o script. ```bash chmod +x .git/hooks/commit-msg ``` -------------------------------- ### Criar Diretório de Hooks do Git Source: https://github.com/iuricode/padroes-de-commits/blob/main/README.md Comando para criar o diretório `.git/hooks` se ele não existir. Este diretório é onde os scripts de hook do Git são armazenados. ```bash mkdir -p .git/hooks ``` -------------------------------- ### Script de Validação Git Hook (commit-msg.sh) Source: https://context7.com/iuricode/padroes-de-commits/llms.txt Um script Bash que atua como um Git Hook 'commit-msg'. Ele valida se a mensagem de commit segue o padrão do Conventional Commits usando uma expressão regular. Se o formato for inválido, ele exibe uma mensagem de erro e bloqueia o commit. ```bash #!/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." echo " refactor: Refatoração de código." echo " test: Adicionar ou atualizar testes." echo " chore: Tarefas rotineiras." echo " build: Alterações no sistema de build." echo " ci: Alterações em configuração de CI." echo " perf: Melhorias de desempenho." echo " revert: Reverter um commit anterior." exit 1 fi exit 0 ``` === COMPLETE CONTENT === This response contains all available snippets from this library. No additional content exists. Do not make further requests.