Skip to content
Latchkey

O Que É um Pre-Commit Hook?

Um pre-commit hook é um script que roda logo antes de um commit ser registrado, capaz de verificar ou corrigir as mudanças e bloquear o commit se algo estiver errado.

Um pre-commit hook é o hook do Git mais popular porque captura problemas no momento mais cedo possível, antes mesmo de um commit existir. Ele roda suas verificações, linting, formatação, varredura de segredos, sobre as mudanças em stage e pode interromper o commit se elas falharem, mantendo código ruim fora do histórico.

Quando ele roda

O pre-commit hook dispara após você executar git commit, mas antes de o commit ser finalizado. Ele inspeciona as mudanças em stage e sai com sucesso ou falha. Uma saída diferente de zero aborta o commit, então o desenvolvedor corrige o problema e tenta de novo, tudo sem nada entrar no histórico.

Verificações comuns de pre-commit

  • Linting e formatação de código nos arquivos em stage.
  • Varredura de segredos ou chaves acidentalmente em stage.
  • Execução de testes unitários rápidos no código alterado.
  • Bloqueio de arquivos grandes ou padrões proibidos.

Gerenciando pre-commit hooks

Como os hooks brutos vivem fora do controle de versão, as equipes usam frameworks para defini-los e compartilhá-los, de modo que todos recebam as mesmas verificações.

A shared pre-commit config
# .pre-commit-config.yaml
repos:
  - repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v4.6.0
    hooks:
      - id: trailing-whitespace

Pre-commit hooks e CI/CD

Rodar as mesmas verificações de lint e formatação localmente como um pre-commit hook significa que a maioria dos problemas é capturada antes de o código ser enviado, então o CI falha muito menos em problemas triviais. Isso encurta o ciclo de feedback e economiza minutos de CI. O CI ainda re-executa as verificações como o gate autoritativo, já que os hooks podem ser ignorados.

Boas práticas de pre-commit

  • Mantenha os hooks rápidos para que não desacelerem o commit.
  • Espelhe localmente as principais verificações de CI para capturar problemas cedo.
  • Use um framework para compartilhar hooks entre a equipe.
  • Confie no CI como o gate imposto e nos hooks como o gate inicial.

Principais conclusões

  • Um pre-commit hook roda verificações antes de um commit ser registrado.
  • Ele captura problemas de lint, formatação e segredos no ponto mais cedo.
  • Ele encurta o ciclo de feedback do CI, mas não substitui o gate do CI.

Guias relacionados