Configuração do Git
Aliases, hooks e padrões sensatos do Git para equipes Python que usam uv, ruff e pytest localmente e em CI.
Receita
git config --global user.name "Ada Lovelace"
git config --global user.email "ada@acme.com"
git config --global pull.rebase true
git config --global fetch.prune true
git config --global alias.lg "log --oneline --graph -20"Quando usar isso:
- Configuração de novo laptop para desenvolvedores
- Padronização do comportamento do git da equipe por meio de documentação + configuração de modelo
- Adição de hooks pre-commit que correspondem às GitHub Actions
- Habilitação de assinatura de commit ou assinaturas GPG/SSH
Exemplo de Trabalho
# ~/.gitconfig (excerto)
[user]
name = Ada Lovelace
email = ada@acme.com
[pull]
rebase = true
[fetch]
prune = true
[init]
defaultBranch = main
[alias]
st = status -sb
sync = "!git fetch origin && git rebase origin/main"
cleanup = "!git branch --merged main | grep -v main | xargs git branch -d"# .pre-commit-config.yaml (repositório)
repos:
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.9.0
hooks:
- id: ruff
- id: ruff-format
- repo: local
hooks:
- id: pytest-quick
name: pytest quick
entry: uv run pytest -q tests/unit
language: system
pass_filenames: falseO que isso demonstra:
- Identidade global e padrões de rebase-on-pull
- Aliases curtos para sincronização diária
- pre-commit espelha linting de CI e testes unitários rápidos
defaultBranch = mainpara novos repositórios
Análise Profunda
Como Funciona
- Níveis de configuração - system < global < local < worktree; local substitui global por repositório.
- Hooks - Scripts em
.git/hooks/ou gerenciados pelo framework pre-commit. - Atributos -
.gitattributespara nbstripout, LFS, gerado pelo linguist. - Assinatura - Assinatura de commit SSH (
gpg.format ssh) no Git moderno.
Configurações Recomendadas
| Configuração | Valor | Por quê |
|---|---|---|
pull.rebase | true | Integração linear de funcionalidades |
fetch.prune | true | Remove branches remotos desatualizados |
rebase.autoStash | true | Rebase com árvore suja (cuidado) |
core.autocrlf | input em mac/linux | Evita ruído CRLF em Python |
init.defaultBranch | main | Nome consistente do branch principal |
Notas Python
# Identidade local do repositório para laptop de trabalho
git config user.email "ada@acme.com"
# Garante que os hooks sejam executados
uv run pre-commit install
uv run pre-commit run --all-filesArmadilhas
- Hooks globais bloqueando commits WIP - Pytest completo a cada commit atrasa o fluxo. Correção: subconjunto rápido de unidades localmente; suite completa em CI.
- Surpresa do autoStash - Entradas de stash ocultas após o rebase. Correção: higiene do
git stash list. - Email errado nos commits - Quebra o CLA e a auditoria. Correção:
git config user.emailpor repositório para contratados. - Pular hooks com
--no-verify- Ignora ruff em commit de emergência. Correção: permitir apenas em caso de quebra; corrigir antes de mesclar. - Finais de linha do Windows - CRLF misturado falha o ruff. Correção:
.gitattributes* text=auto eol=lf. - Assinatura de commit mal configurada - Pushes rejeitados. Correção: testar
git commit -S -m "test"em um branch primeiro.
Alternativas
| Alternativa | Usar Quando | Não Usar Quando |
|---|---|---|
| Husky (Equipes Node) | Monorepo com JS + Python | Python puro - pre-commit é um ajuste nativo |
| Portões apenas de CI | Hooks politicamente bloqueados | Desenvolvedores enviam ruff falhando com frequência |
git config --global includeIf | Trabalho vs. repositórios pessoais em um laptop | Máquina de um único empregador |
| Lista de verificação manual | Equipe pequena | Escalar além de ~5 desenvolvedores |
FAQs
Pre-commit global ou por repositório?
Repositório .pre-commit-config.yaml commitado - todos compartilham hooks; pre-commit install por clone.
Configuração de assinatura de commit SSH?
git config gpg.format ssh e user.signingkey para o caminho da chave pública - GitHub verifica assinaturas SSH.
Alias para PR do branch atual?
gh pr view --web ou alias pr = "!gh pr view --web" após o push.
Helper de credenciais no macOS?
Osxkeychain armazena tokens HTTPS; prefira SSH para operações git.
Template gitconfig para onboarding?
Link da Lista de Verificação de Configuração de Ambiente com bloco de copiar e colar.
core.excludesfile global ignore?
~/.gitignore_global para .DS_Store, arquivos IDE - complementa .gitignore do repositório.
Revs de ignorar blame?
.git-blame-ignore-revs para commits de formatação em massa - arqueologia mais limpa.
Configuração de submódulo?
Raro em serviços Python - se usado, submodule.recurse para comportamento de clone/pull.
Desempenho de repositório grande?
feature.manyFiles true e clone parcial git clone --filter=blob:none para monorepos enormes.
Desabilitar pull de rebase para um repositório?
git config pull.rebase false override local ao mesclar branches de release com frequência.
Relacionados
- Comandos Essenciais do Git - comandos que os aliases envolvem
- Git para Dados/Notebooks - atributos nbstripout
- Linting e Formatação - ruff em hooks
- Lista de Verificação de Configuração de Ambiente - configuração de novo dev
Versões da Stack: Esta página foi escrita para Python 3.14.0 (estável 3.14, manutenção 3.13), FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+ e uv 0.6+.