CC Hook - Conventional Commits Hook
Uma CLI cross-platform em Rust para configurar automaticamente um git hook que valida mensagens de commit seguindo o padrão Conventional Commits.
🔀 Fork do projeto Conventional-Commits-Hook por @murillous, reescrito em Rust para compatibilidade cross-platform e capacidade de extensão.
🎯 O que faz
Este programa instala um hook commit-msg no seu repositório Git que:
- ✅ Valida automaticamente todas as mensagens de commit
- 🚫 Bloqueia commits que não seguem o padrão Conventional Commits
- 📝 Fornece feedback claro sobre erros e exemplos de uso correto
- 🔒 Mantém backup de hooks existentes
- 🎨 Interface colorida e amigável
📋 Pré-requisitos
- Rust/Cargo instalado
- Git instalado no sistema
- Estar dentro de um repositório Git inicializado
🚀 Instalação
O Cargo se encarrega de compilar e colocar o binário no PATH automaticamente (~/.cargo/bin).
💡 Dica: Se
~/.cargo/binnão estiver no PATH, o própriocargo installavisa e mostra como configurar.
Uso
Após a instalação, basta navegar até o repositório desejado e executar:
O hook será instalado em .git/hooks/commit-msg. A partir daí, todos os commits serão validados automaticamente. Se a mensagem não estiver no formato correto, o commit será rejeitado.
✅ Exemplos de commits válidos
❌ Exemplos de commits inválidos
🏷️ Tipos de commit suportados
| Tipo | Descrição |
|---|---|
feat |
Nova funcionalidade |
fix |
Correção de bug |
docs |
Alterações na documentação |
style |
Formatação, espaços (sem mudança de código) |
refactor |
Refatoração (sem nova funcionalidade ou correção) |
test |
Adicionar ou modificar testes |
chore |
Manutenção geral (dependências, ferramentas) |
build |
Sistema de build ou dependências externas |
ci |
Configuração de CI/CD |
perf |
Melhoria de performance |
revert |
Reverter commit anterior |
🎯 Formato das mensagens
<tipo>(<escopo opcional>): <descrição>
Exemplos:
feat(auth): implementar login com JWT
fix: corrigir vazamento de memória
docs(api): adicionar documentação dos endpoints
Breaking Changes
Para indicar mudanças que quebram compatibilidade, use !:
)!
🛠️ Funcionalidades
✨ Recursos
- Validação automática: Verifica se está em um repositório Git
- Backup inteligente: Preserva hooks existentes com timestamp
- Interface amigável: Mensagens coloridas e informativas
- Flexível: Permite sobrescrever hooks existentes
- Completo: Feedback detalhado sobre erros
- Cross-platform: Funciona em qualquer terminal (PowerShell, CMD, Bash, Zsh, Fish)
🔧 Exceções automáticas
O hook ignora automaticamente:
- Merge commits (
Merge branch...) - Revert commits (
Revert...) - Commits iniciais (
Initial commit) - Commits vazios
🔧 Gerenciamento
Ver status do hook
Remover o hook
Restaurar backup
🌍 Compatibilidade
- ✅ Linux
- ✅ macOS
- ✅ Windows (PowerShell, CMD, Windows Terminal)
- ✅ Todas as versões do Git
🤝 Contribuindo
Contribuições são bem-vindas! Para contribuir:
- Faça fork do projeto
- Crie uma branch para sua feature (
git checkout -b feature/nova-funcionalidade) - Commit suas mudanças (
git commit -m "feat: adicionar nova funcionalidade") - Push para a branch (
git push origin feature/nova-funcionalidade) - Abra um Pull Request
📝 Licença
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
📚 Links úteis
- Conventional Commits Specification
- Semantic Versioning
- Git Hooks Documentation
- Projeto original (shell)
❓ FAQ
P: O hook funciona em repositórios já existentes?
R: Sim, funciona em qualquer repositório Git, novo ou existente.
P: Posso personalizar os tipos de commit?
R: Sim, você pode editar o arquivo .git/hooks/commit-msg para adicionar tipos customizados.
P: O que acontece se eu clonar o repositório?
R: Hooks não são versionados pelo Git, então cada colaborador precisa executar cc-hook install.
P: Posso usar em repositórios corporativos?
R: Sim, o programa é totalmente local e não envia dados para nenhum servidor.
P: Como verifico se o comando está disponível globalmente?
R: Execute cc-hook sem argumentos para verificar se está no PATH.
P: O que fazer se o comando não for encontrado?
R: Verifique se ~/.cargo/bin está no PATH. O cargo install geralmente configura isso automaticamente.
Talvez você queira dar uma olhada no repositório original deste projeto, com uma versão completa em Schell Script :)