💬 Ferramenta em Shell Script para criar commits padronizados, com changelog automático, validação de mensagens e instalação simplificada via terminal.
Commits semânticos seguem uma convenção simples e eficiente para padronizar mensagens de commit. Essa prática define um conjunto claro de regras que torna o histórico de alterações mais legível e fácil de entender — tanto por pessoas quanto por ferramentas automatizadas.
Cada commit é identificado por um tipo específico (como funcionalidade, correção, documentação, visual, teste etc.), geralmente acompanhado de um emoji. Isso permite saber rapidamente o que foi alterado sem precisar ler todo o diff.
Adotar essa convenção ajuda você e sua equipe a manter o controle do que está sendo desenvolvido, entender a intenção por trás de cada mudança, e facilitar a automação de processos como geração de changelog e versionamento.
Ver mais
- 🧠 Comitar – Commit Semântico Interativo com Emojis 📝
- Tipos de Commit 🦄
- 📖 Requisitos
- 🚀 Instalação Rápida
- ✨ Funcionalidades
- 📋 Exemplo de uso
- 🛠️ Configuração local
- 📦 Estrutura de commit semântico
- 💈 Tipos disponíveis
- 🧪 Exemplo visual
- 💻 Execução do
Comitar
- 🧩 Estrutura do projeto
- 📑 CONVENÇÃO DE NOMENCLATURAS
- 🧪 Testes
- 🖼️ DIAGRAMAS
- ⚡ Autocomplete de argumentos
- 🧠 Contribuindo
- 🆘 SUPORTE
- 📄 Licença
- 🤝 CONTRIBUIÇÕES E CONTRIBUIDORES
Os commits semânticos seguem uma estrutura que deixa claro qual foi a intenção da mudança. Cada tipo abaixo representa uma categoria específica de alteração no projeto:
-
feat – Adiciona uma nova funcionalidade ao código. Relacionado a mudanças MINOR no versionamento semântico.
-
fix – Corrige um bug ou comportamento inesperado. Relacionado a mudanças PATCH.
-
docs – Atualiza ou corrige documentação, como o README.md. Não afeta o código em si.
-
test – Cria, ajusta ou remove testes. Usado para testes unitários, de integração etc. Sem impacto direto no código de produção.
-
build – Modifica arquivos relacionados ao processo de build ou gerenciadores de dependência (como build.gradle, pubspec.yaml).
-
perf – Alterações que melhoram o desempenho da aplicação sem alterar comportamento.
-
style – Ajustes de formatação, indentação, espaços, lint, remoção de ponto e vírgula, etc. Não afeta lógica do código.
-
refactor – Refatorações internas que não alteram funcionalidade (ex: reestruturação de lógica, melhorias após code review, limpeza de duplicações).
-
chore – Tarefas rotineiras ou administrativas que não afetam código funcional, como ajustes no .gitignore, atualizações de dependências, scripts, configs.
-
ci – Alterações em arquivos e scripts de integração contínua (CI), como workflows do GitHub Actions, GitLab CI, etc.
-
raw – Mudanças específicas em arquivos de dados, parâmetros, configurações brutas ou flags de features.
-
cleanup – Remoção de código morto, comentado, redundante ou não utilizado, focando na organização e clareza do código.
-
remove – Exclusão de arquivos, diretórios ou funcionalidades obsoletas ou que não fazem mais sentido no projeto.
O comitar
é uma ferramenta de linha de comando e foi projetado para funcionar em ambientes baseados em Unix (Linux, macOS).
Dependências obrigatórias:
- Git: Essencial para a instalação (via
git clone
) e para o funcionamento docomitar
. - jq: Usado para processar arquivos de configuração JSON.
- Bash: Versão 4 ou superior.
O script de instalação pode instalar o git
e o jq
para você em sistemas baseados em Debian, Red Hat ou Arch, usando a flag --full
. Para o download do instalador, você precisará de curl
ou wget
.
O instalador agora clona o repositório oficial para ~/.comitar
, garantindo que as atualizações (comitar --upgrade
) sejam mais rápidas e seguras.
Comando de Instalação:
bash <(curl -fsSL https://raw.githubusercontent.com/ketteiGustavo/comitar/main/tools/install.sh)
Instalação com dependências (Recomendado):
Se você não tem certeza se possui git
e jq
instalados, use a flag --full
para que o instalador cuide disso para você:
bash <(curl -fsSL https://raw.githubusercontent.com/ketteiGustavo/comitar/main/tools/install.sh) -- --full
Após a instalação, reinicie seu terminal ou execute source ~/.bashrc
(ou ~/.zshrc
) para que o comando comitar
e o autocomplete estejam disponíveis.
- ✅ Interface interativa com menu de tipos de commit
- ✅ Emojis automáticos baseados no tipo escolhido
- ✅ Geração de changelog em
.changelog.md
- ✅ Hook Git opcional para validar commits (
--install-hook
) - ✅ Push automático com upstream inteligente
- ✅ Configuração dinâmica via
comitar.json
(incluindo cores, emojis e escopo) - ✅ Autocomplete de argumentos no terminal
- ✅ Scripts auxiliares para upgrade e desinstalação
comitar # Executa o menu de commits
comitar --commit # Força o menu mesmo fora de um repositório
comitar --install-hook # Instala o hook commit-msg no projeto atual
comitar --install-dir # Especifica o diretório de instalação
comitar --config # Configura opções do Comitar (cores, emojis, escopo)
comitar --version # Mostra a versão atual do utilitário
comitar --help # Exibe ajuda detalhada
comitar --upgrade # Atualiza o Comitar para a última versão
comitar --uninstall # Remove completamente o Comitar
comitar --undo # Desfaz o último commit realizado
O comitar
agora busca o arquivo de configuração .comitar.json
na raiz do seu repositório Git.
Se o arquivo não for encontrado na primeira execução dentro de um repositório Git, ele será automaticamente copiado do diretório de instalação global (~/.comitar/config/comitar.json
) para .comitar.json
na raiz do seu projeto. Além disso, ele será automaticamente adicionado ao .gitignore
do seu projeto.
Esse arquivo pode ser editado à vontade para personalizar os tipos de commit, caminho do changelog e outras configurações, sem afetar a instalação global do Comitar.
Você pode configurar as seguintes opções no .comitar.json
ou interativamente com comitar --config
:
default_push
(boolean): Setrue
, executagit push
automaticamente após um commit bem-sucedido. Padrão:false
.ask_push
(boolean): Sedefault_push
forfalse
, esta opção controla se o script deve perguntar ao usuário se deseja fazer o push. Padrão:true
.use_commit_body
(boolean): Setrue
, o script solicitará uma descrição longa (corpo) para o commit após a mensagem curta. Padrão:false
.use_colors
(boolean): Define se as mensagens do terminal devem usar cores. Padrão:true
.use_blinks
(boolean): Define se as mensagens do terminal devem piscar. Padrão:true
.use_emojis
(boolean): Define se os commits devem incluir emojis. Padrão:true
.use_scope
(boolean): Define se o prompt de commit deve perguntar por um escopo (ex:feat(auth):
). Padrão:false
.add_all_files
(boolean): Setrue
, executagit add -A
para adicionar todos os arquivos automaticamente. Sefalse
, exibe uma lista interativa para selecionar quais arquivos incluir no commit. Padrão:true
.version_control
(boolean): Ativa o controle de versão automático antes do commit. Padrão:false
.version_targets
(array): Lista de arquivos e variáveis a serem atualizados com a nova versão. O primeiro da lista é a fonte da verdade.file
(string): Caminho para o arquivo (ex:VERSION
oupackage.json
).var_name
(string): Nome da variável no arquivo (ex:APP_VERSION
). Se vazio, a primeira linha do arquivo é substituída.
version_build
(boolean): Define se o número de build deve ser incrementado e adicionado à versão (ex:1.2.3+1
). Padrão:false
.control_tag
(boolean): Setrue
, o script irá sugerir e criar uma tag Git (ex:v1.2.3
) após um commit bem-sucedido. Padrão:false
.default_types
(variable): Padrão de tipos pré-definidos para oComitar
.custom_types
(variable): Tipos customizados para seus projetos.
:<emoji>: tipo: mensagem resumida
git commit -m ":sparkles: feat: Adiciona tela de login"
git commit -m ":bug: fix: Corrige erro ao salvar formulário"
git commit -m ":broom: cleanup: Remove código morto"
Tipo | Emoji | Descrição |
---|---|---|
feat |
✨ | Novo recurso |
fix |
🐛 | Correção de bug |
docs |
📚 | Documentação |
test |
🧪 | Testes |
build |
📦 | Build / dependências |
style |
👌 | Estilo / revisão |
refactor |
♻️ | Refatoração |
chore |
🔧 | Configuração / tarefas |
ci |
🧱 | Integração contínua |
deploy |
🚀 | Deploy |
init |
🎉 | Commit inicial |
cleanup |
🧹 | Limpeza de código |
remove |
🗑️ | Remoção de arquivos |
responsive |
📱 | Responsividade |
animation |
💫 | Animações |
security |
🔒️ | Segurança |
seo |
🔍️ | SEO |
rollback |
💥 | Reversão de mudanças |
text |
📝 | Texto |
typing |
🏷️ | Tipagem |
error |
🥅 | Tratamento de erros |
raw |
🗃️ | Dados / arquivos brutos |
soon |
🔜 | Ideias / tarefas futuras |
Selecione o tipo de commit:
1. feat: ✨ Novo recurso
2. fix: 🐛 Bugfix
...
✏️ Digite a mensagem do commit: Padroniza os seus commits em Repositórios
📦 Commit final: :sparkles: feat: Padroniza os seus commits em Repositórios
✔ Commit realizado com sucesso.
✔ Changelog atualizado em .changelog.md
Para utilizar o Comitar, após ter instalado, siga o passo-a-passo abaixo:
-
Execute o comando
comitar
ou se preferir o alias que foi instaladocmt
-
Selecione o tipo desejado no menu e informe a mensagem do commit
-
Repita quantas vezes for necessário 😎
.comitar/
├── bin/
│ └── comitar
├── assets/
│ └── images/
│ ├── comitar001.png
│ ├── comitar002.png
│ ├── comitar003.png
│ ├── comitar004.png
│ ├── comitar005.png
│ └── comitar_capa.png
├── docs/
│ ├── extensoes-vscode.md
│ ├── guia-git.md
│ ├── guia-markdown.md
│ └── LICENCE
├── config/
│ └── comitar.json
├── hooks/
│ └── commit-check
├── man/
│ ├── cmt.1 -> /home/luiz/workspaces/comitar/man/comitar.1
│ └── comitar.1
├── tests/
│ └── test.sh
├── tools/
│ ├── changelog.sh
│ ├── comitar-autocomplete
│ ├── install.sh
│ ├── uninstall.sh
│ └── upgrade.sh
├── .gitignore
├── comitar.drawio
├── CHANGELOG.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── run_tests.sh
├── SECURITY.md
└── VERSION
- 🇧🇷 Comentários e prints em português
- 🇺🇸 Códigos em inglês
- 🐍 snake_case para nomes de funções, métodos, variáveis
Para executar os testes automatizados, você precisa ter o bats-core
instalado.
sudo apt-get install bats
Após instalar o bats
, execute o script run_tests.sh
na raiz do projeto:
./run_tests.sh
O comitar
instala o autocomplete automaticamente para Bash e Zsh.
Se necessário, recarregue o terminal ou execute:
source ~/.bashrc # ou ~/.zshrc
Contribuições são bem-vindas!
Contribuições são o que torna a comunidade de código aberto um lugar tão incrível para aprender, inspirar e criar. Quaisquer contribuições que você fizer beneficiarão a todos e serão muito apreciadas.
Siga o CONTRIBUINDO desse projeto.
-
Faça um Fork do Repositório Clique no botão "Fork" no canto superior direito desta página para criar uma cópia do repositório na sua própria conta do GitHub.
-
Clone o Seu Fork Agora, clone o repositório que você acabou de "forkar" para a sua máquina local. Substitua
SEU-USUARIO
pelo seu nome de usuário do GitHub.git clone [email protected]:SEU-USUARIO/comitar.git cd comitar
-
Crie uma Nova Branch Crie uma branch para trabalhar na sua nova funcionalidade ou correção.
git checkout -b minha-incrivel-melhoria
-
Faça suas Alterações e Commits Faça as modificações desejadas no código. Use o próprio
comitar
para criar seus commits semânticos!comitar --commit
-
Envie suas Alterações (Push) Envie a sua branch para o seu fork no GitHub.
git push origin minha-incrivel-melhoria
-
Abra um Pull Request (PR) Volte para a página do seu fork no GitHub. Você verá um botão para "Compare & pull request". Clique nele, descreva suas alterações e abra o PR. A equipe do projeto irá revisar suas mudanças.
Se você não quer editar o código, mas encontrou um problema ou tem uma ideia, pode nos ajudar abrindo uma Issue. Use um dos nossos templates para garantir que temos toda a informação necessária:
Siga o Código de Conduta desse projeto.
Tente criar relatórios de bugs que sejam:
- Reproduzível. Inclua etapas para reproduzir o problema.
- Específico. Inclua o máximo de detalhes possível: qual versão, qual ambiente, etc.
- Único. Não duplique problemas abertos existentes.
- Escopo para um único bug. Um bug por relatório.
Entre em contato com o mantenedor em um dos seguintes locais:
- Discusões no GitHub
- Através do perfil no GitHub
- Ou através desse e-mail
Este projeto está sob a licença GNU General Public License v3.0.
Um agradecimento especial a todas as pessoas que contribuíram para este projeto.
Luiz Gustavo Desenvolvedor |