355 lines
9.8 KiB
Markdown
355 lines
9.8 KiB
Markdown
## Commit Message
|
|
|
|
Gera mensagens de commit apropriadas a partir de mudanças staged (git diff --staged). Não executa comandos git, apenas gera mensagens e copia para a área de transferência.
|
|
|
|
### Uso
|
|
|
|
```bash
|
|
/commit-message [opções]
|
|
```
|
|
|
|
### Opções
|
|
|
|
- `--format <formato>` : Especifica formato da mensagem (conventional, gitmoji, angular)
|
|
- `--lang <idioma>` : Força especificação do idioma da mensagem (en, pt)
|
|
- `--breaking` : Detecção e descrição de Breaking Change
|
|
|
|
### Exemplos Básicos
|
|
|
|
```bash
|
|
# Gerar mensagem a partir de mudanças staged (detecção automática de idioma)
|
|
# O candidato principal é automaticamente copiado para a área de transferência
|
|
/commit-message
|
|
|
|
# Forçar especificação de idioma
|
|
/commit-message --lang pt
|
|
/commit-message --lang en
|
|
|
|
# Detectar Breaking Change
|
|
/commit-message --breaking
|
|
```
|
|
|
|
### Pré-requisitos
|
|
|
|
**Importante**: Este comando analisa apenas mudanças staged. É necessário fazer staging das mudanças com `git add` previamente.
|
|
|
|
```bash
|
|
# Se não houver staging, será exibido um aviso
|
|
$ /commit-message
|
|
Não há mudanças staged. Execute git add primeiro.
|
|
```
|
|
|
|
### Função Automática de Área de Transferência
|
|
|
|
O candidato principal gerado é automaticamente copiado para a área de transferência no formato completo `git commit -m "mensagem"`. Pode ser colado diretamente no terminal para execução.
|
|
|
|
**Atenção na implementação**:
|
|
|
|
- Ao passar comando de commit para `pbcopy`, execute em processo separado da saída da mensagem
|
|
- Use `printf` em vez de `echo` para evitar quebra de linha no final
|
|
|
|
### Detecção Automática de Convenções do Projeto
|
|
|
|
**Importante**: Se existirem convenções específicas do projeto, elas têm prioridade.
|
|
|
|
#### 1. Verificação de Configuração CommitLint
|
|
|
|
Detecção automática a partir dos seguintes arquivos:
|
|
|
|
- `commitlint.config.js`
|
|
- `commitlint.config.mjs`
|
|
- `commitlint.config.cjs`
|
|
- `commitlint.config.ts`
|
|
- `.commitlintrc.js`
|
|
- `.commitlintrc.json`
|
|
- `.commitlintrc.yml`
|
|
- `.commitlintrc.yaml`
|
|
- Seção `commitlint` do `package.json`
|
|
|
|
```bash
|
|
# Busca por arquivos de configuração
|
|
find . -name "commitlint.config.*" -o -name ".commitlintrc.*" | head -1
|
|
```
|
|
|
|
#### 2. Detecção de Tipos Customizados
|
|
|
|
Exemplo de tipos específicos do projeto:
|
|
|
|
```javascript
|
|
// commitlint.config.mjs
|
|
export default {
|
|
extends: ["@commitlint/config-conventional"],
|
|
rules: {
|
|
"type-enum": [
|
|
2,
|
|
"always",
|
|
[
|
|
"feat",
|
|
"fix",
|
|
"docs",
|
|
"style",
|
|
"refactor",
|
|
"test",
|
|
"chore",
|
|
"wip", // em andamento
|
|
"hotfix", // correção urgente
|
|
"release", // release
|
|
"deps", // atualização de dependências
|
|
"config", // mudança de configuração
|
|
],
|
|
],
|
|
},
|
|
};
|
|
```
|
|
|
|
#### 3. Detecção de Configuração de Idioma
|
|
|
|
```javascript
|
|
// Quando o projeto usa mensagens em japonês
|
|
export default {
|
|
rules: {
|
|
"subject-case": [0], // Desabilitado para suporte ao japonês
|
|
"subject-max-length": [2, "always", 72], // Ajuste de limite de caracteres para japonês
|
|
},
|
|
};
|
|
```
|
|
|
|
#### 4. Análise de Histórico de Commits Existentes
|
|
|
|
```bash
|
|
# Aprendizado de padrões de uso a partir de commits recentes
|
|
git log --oneline -50 --pretty=format:"%s"
|
|
|
|
# Estatísticas de tipos utilizados
|
|
git log --oneline -100 --pretty=format:"%s" | \
|
|
grep -oE '^[a-z]+(\([^)]+\))?' | \
|
|
sort | uniq -c | sort -nr
|
|
```
|
|
|
|
### Detecção Automática de Idioma
|
|
|
|
Alternância automática entre japonês/inglês baseada nas seguintes condições:
|
|
|
|
1. Verificação de configuração de idioma nas **configurações CommitLint**
|
|
2. Julgamento automático através de **análise do git log**
|
|
3. Configurações de idioma de **arquivos do projeto**
|
|
4. Análise de comentários e strings **dentro de arquivos modificados**
|
|
|
|
O padrão é inglês. Quando identificado como projeto japonês, gera em japonês.
|
|
|
|
### Formato da Mensagem
|
|
|
|
#### Conventional Commits (padrão)
|
|
|
|
```text
|
|
<type>: <description>
|
|
```
|
|
|
|
**Importante**: Sempre gera mensagem de commit de 1 linha. Não gera mensagens de múltiplas linhas.
|
|
|
|
**Nota**: Se existirem convenções específicas do projeto, elas têm prioridade.
|
|
|
|
### Tipos Padrão
|
|
|
|
**Tipos obrigatórios**:
|
|
|
|
- `feat`: Nova funcionalidade (adição de funcionalidade visível ao usuário)
|
|
- `fix`: Correção de bug
|
|
|
|
**Tipos opcionais**:
|
|
|
|
- `build`: Mudanças no sistema de build ou dependências externas
|
|
- `chore`: Outras mudanças (que não afetam o release)
|
|
- `ci`: Mudanças em arquivos de configuração ou scripts de CI
|
|
- `docs`: Mudanças apenas na documentação
|
|
- `style`: Mudanças que não afetam o significado do código (espaços, formatação, ponto e vírgula, etc.)
|
|
- `refactor`: Mudanças no código que não envolvem correção de bug ou adição de funcionalidade
|
|
- `perf`: Melhoria de performance
|
|
- `test`: Adição ou correção de testes
|
|
|
|
### Exemplo de Saída (Projeto em Inglês)
|
|
|
|
```bash
|
|
$ /commit-message
|
|
|
|
📝 Sugestão de mensagem de commit
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
|
|
✨ Candidato principal:
|
|
feat: implement JWT-based authentication system
|
|
|
|
📋 Alternativas:
|
|
1. feat: add user authentication with JWT tokens
|
|
2. fix: resolve token validation error in auth middleware
|
|
3. refactor: extract auth logic into separate module
|
|
|
|
✅ `git commit -m "feat: implement JWT-based authentication system"` copiado para a área de transferência
|
|
```
|
|
|
|
**Exemplo de implementação (versão corrigida)**:
|
|
|
|
```bash
|
|
# Copiar comando de commit para área de transferência primeiro (sem quebra de linha)
|
|
printf 'git commit -m "%s"' "$COMMIT_MESSAGE" | pbcopy
|
|
|
|
# Depois exibir mensagem
|
|
cat << EOF
|
|
📝 Sugestão de mensagem de commit
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
|
|
✨ Candidato principal:
|
|
$COMMIT_MESSAGE
|
|
|
|
📋 Alternativas:
|
|
1. ...
|
|
2. ...
|
|
3. ...
|
|
|
|
✅ \`git commit -m "$COMMIT_MESSAGE"\` copiado para a área de transferência
|
|
EOF
|
|
```
|
|
|
|
### Exemplo de Saída (Projeto em Japonês)
|
|
|
|
```bash
|
|
$ /commit-message
|
|
|
|
📝 Sugestão de mensagem de commit
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
|
|
✨ Candidato principal:
|
|
feat: implementar sistema de autenticação JWT
|
|
|
|
📋 Alternativas:
|
|
1. feat: adicionar autenticação de usuário com token JWT
|
|
2. fix: resolver erro de validação de token no middleware de autenticação
|
|
3. docs: separar lógica de autenticação em módulo independente
|
|
|
|
✅ `git commit -m "feat: implementar sistema de autenticação JWT"` copiado para a área de transferência
|
|
```
|
|
|
|
### Visão Geral da Operação
|
|
|
|
1. **Análise**: Analisar conteúdo de `git diff --staged`
|
|
2. **Geração**: Gerar mensagem de commit apropriada
|
|
3. **Cópia**: Copiar candidato principal automaticamente para a área de transferência
|
|
|
|
**Nota**: Este comando não executa git add ou git commit. Apenas gera mensagem de commit e copia para a área de transferência.
|
|
|
|
### Funcionalidades Inteligentes
|
|
|
|
#### 1. Classificação Automática do Conteúdo das Mudanças (apenas arquivos staged)
|
|
|
|
- Adição de novo arquivo → `feat`
|
|
- Padrão de correção de erro → `fix`
|
|
- Apenas arquivos de teste → `test`
|
|
- Mudança de arquivo de configuração → `chore`
|
|
- Atualização de README/docs → `docs`
|
|
|
|
#### 2. Detecção Automática de Convenções do Projeto
|
|
|
|
- Arquivo `.gitmessage`
|
|
- Convenções dentro de `CONTRIBUTING.md`
|
|
- Padrões de histórico de commits anteriores
|
|
|
|
#### 3. Detalhes da Detecção de Idioma (apenas mudanças staged)
|
|
|
|
```bash
|
|
# Critérios de julgamento (ordem de prioridade)
|
|
1. Julgar idioma a partir do conteúdo de git diff --staged
|
|
2. Análise de comentários de arquivos staged
|
|
3. Análise de idioma de git log --oneline -20
|
|
4. Configuração de idioma principal do projeto
|
|
```
|
|
|
|
#### 4. Detalhes da Análise de Staging
|
|
|
|
Informações usadas para análise (apenas leitura):
|
|
|
|
- `git diff --staged --name-only` - Lista de arquivos modificados
|
|
- `git diff --staged` - Conteúdo real das mudanças
|
|
- `git status --porcelain` - Status dos arquivos
|
|
|
|
### Quando Breaking Change é Detectado
|
|
|
|
Se houver mudanças disruptivas na API:
|
|
|
|
**Inglês**:
|
|
|
|
```bash
|
|
feat!: change user API response format
|
|
|
|
BREAKING CHANGE: user response now includes additional metadata
|
|
```
|
|
|
|
ou
|
|
|
|
```bash
|
|
feat(api)!: change authentication flow
|
|
```
|
|
|
|
**Exemplo de Breaking Change**:
|
|
|
|
```bash
|
|
feat!: alterar formato de resposta da API de usuários
|
|
|
|
BREAKING CHANGE: A resposta agora inclui metadados adicionais
|
|
```
|
|
|
|
ou
|
|
|
|
```bash
|
|
feat(api)!: modificar fluxo de autenticação
|
|
```
|
|
|
|
### Melhores Práticas
|
|
|
|
1. **Adaptar ao projeto**: Seguir o idioma dos commits existentes
|
|
2. **Concisão**: Clara em até 50 caracteres
|
|
3. **Consistência**: Não misturar (se inglês, unificar em inglês)
|
|
4. **OSS**: Para open source, recomenda-se inglês
|
|
5. **Rigor de 1 linha**: Sempre fazer mensagem de commit de 1 linha (se necessária explicação detalhada, complementar no PR)
|
|
|
|
### Padrões Comuns
|
|
|
|
**Inglês**:
|
|
|
|
```text
|
|
feat: add user registration endpoint
|
|
fix: resolve memory leak in cache manager
|
|
docs: update API documentation
|
|
```
|
|
|
|
**Exemplo com múltiplas mudanças**:
|
|
|
|
```text
|
|
feat: adicionar endpoint de registro de usuários
|
|
fix: resolver vazamento de memória no gerenciador de cache
|
|
docs: atualizar documentação da API
|
|
```
|
|
|
|
### Integração com Claude
|
|
|
|
```bash
|
|
# Usar em combinação com mudanças staged
|
|
git add -p # Staging interativo
|
|
/commit-message
|
|
"Gere a mensagem de commit mais adequada"
|
|
|
|
# Analisar fazendo staging apenas de arquivos específicos
|
|
git add src/auth/*.js
|
|
/commit-message --lang en
|
|
"Gere mensagem adequada para mudanças relacionadas à autenticação"
|
|
|
|
# Detecção e tratamento de Breaking Change
|
|
git add -A
|
|
/commit-message --breaking
|
|
"Se houver mudança disruptiva, marque adequadamente"
|
|
```
|
|
|
|
### Observações
|
|
|
|
- **Pré-requisitos**: As mudanças devem ser previamente staged com `git add`
|
|
- **Limitações**: Mudanças não staged estão fora do escopo de análise
|
|
- **Recomendação**: Verifique previamente as convenções de commit existentes do projeto
|