image

Unlimited bootcamps and 750+ courses forever

70
%OFF
Article image
Marcelo Hadad
Marcelo Hadad24/05/2025 15:21
Share

Git com múltiplos perfis, do jeito certo

  • #Git

Quantas vezes você já fez um commit e só depois percebeu estar com o e-mail errado no autor? Se você trabalha com projetos pessoais e profissionais na mesma máquina, sabe como isso acontece fácil — e como consertar depois é um incômodo.

No começo do trabalho remoto, eu me vi nesse cenário: cada repositório exigia um perfil diferente, e manter isso manualmente era pedir para errar. Foi aí que descobri uma solução elegante, nativa do próprio Git, que me poupou retrabalho, estresse — e constrangimento em pull requests.

Organização é mais do que estética: é controle

O primeiro passo foi estruturar meus repositórios de forma clara, direto na raiz do disco:

D:/
 └── repos/
   ├── personal/
   └── acme/

Essa separação não só facilita a navegação, como permite que o Git entenda em qual contexto estou trabalhando — pessoal ou profissional.

O problema é que o Git, por padrão, usa um único autor global — e isso pode gerar situações delicadas. Imagine comitar em um repositório da empresa usando seu e-mail pessoal, ou, pior, contribuir para um projeto open source sem perceber que seu e-mail corporativo está sendo exposto publicamente.

Além de dificultar o rastreamento interno por ferramentas de auditoria, isso pode levar à exposição desnecessária de informações pessoais ou corporativas — e comprometer políticas de segurança ou compliance.

Git inteligente: mudando de identidade automaticamente

O Git permite que você defina configurações específicas com base no caminho do repositório. E isso muda o jogo.

Como o includeIf funciona — explicando a mágica

O includeIf é uma diretiva do Git que permite carregar configurações condicionais, com base em onde você está no sistema de arquivos. Ele avalia o caminho do repositório atual (gitdir:) e, se o prefixo bater com o que foi definido, carrega o bloco correspondente.

Isso significa que o Git está lendo seu .gitconfig e, ao detectar um caminho como:

[includeIf "gitdir:D:/repos/personal/"]
  path = .gitconfig-personal

E você tiver um .gitconfig-personal preenchido da seguinte forma:

[user]
  email = hadad@outlook.com

Ele entende que, sempre que você estiver dentro de D:/repos/personal/, deve aplicar esse user.email no lugar da configuração global.

🐧 Se você estiver no Linux ou macOS, o caminho segue o padrão POSIX: gitdir:/home/hadad/repos/personal/.

Por que o gitdir: precisa terminar com uma barra (/)

Quando você usa gitdir: dentro de includeIf, o Git faz uma verificação de prefixo de caminho. Isso significa que ele verifica se o diretório do repositório atual começa com o caminho fornecido.

✅ Correto:

[includeIf "gitdir:D:/repos/personal/"]

Esse padrão casa com qualquer repositório dentro de D:/repos/personal/, como:

  • D:/repos/personal/webapi-dotnet/
  • D:/repos/personal/webapp-react/

A barra no final indica: "aplique a configuração para qualquer coisa que esteja dentro dessa pasta".

❌ Incorreto:

[includeIf "gitdir:D:/repos/personal"]

Aqui o Git espera que o diretório do repositório seja exatamente D:/repos/personal, e nada mais. Ou seja, não aplicará a regra para D:/repos/personal/webapi-dotnet/, o que costuma ser o caso de uso real.

Em resumo: sempre que quiser que a configuração se aplique a todos os repositórios dentro de uma pasta, termine o caminho com /. Isso garante que o Git interprete corretamente como um prefixo de diretório — e evita comportamentos inesperados, como uma regra que nunca é aplicada.

Se nenhuma regra includeIf for satisfeita, o Git simplesmente volta a usar o que está no escopo global ou local do repositório, conforme a precedência usual (local > global > system).

Aplicando na prática

Exemplo com arquivos separados

No seu .gitconfig global:

[includeIf "gitdir:D:/repos/personal/"]
  path = .gitconfig-personal

E no .gitconfig-personal:

[user]
  email = hadad@outlook.com

Com isso, qualquer projeto clonado ou criado dentro dessas pastas usará automaticamente o e-mail correto.

Sem comandos extras. Sem gambiarra. A identidade certa, no lugar certo. Sempre.

E se quiser ir além…

Essa técnica vale para muito mais que user.email. Você pode condicionar:

  • Aliases personalizados, como co para checkout, mas só em projetos pessoais.
  • Ferramentas diferentes de diff e merge dependendo do tipo de projeto.
  • Hooks ativados apenas em repositórios críticos (como validação de mensagens de commit ou verificação de secrets).
Isso te dá poder real: comportamentos diferentes para contextos diferentes, sem interferência entre eles.

Conclusão

Se você ainda configura o user.email manualmente, está aceitando um risco desnecessário. O Git já tem tudo que você precisa para gerenciar múltiplos perfis com segurança, elegância e zero fricção.

Automatizar seu perfil de Git não é frescura — é profissionalismo.

#Git #DesenvolvimentoDeSoftware #ProdutividadeDev #BoasPraticas #DevExperience #GitConfig

Share
Recommended for you
Reclame AQUI - Dados e IA na Prática
CI&T - Java AI Copilot
Itaú - Java com Inteligência Artificial
Comments (2)
DIO Community
DIO Community - 27/05/2025 09:55

Incrível, Marcelo! Sua explicação sobre como gerenciar múltiplos perfis Git de forma inteligente, utilizando o includeIf, é de extrema clareza e utilidade prática para qualquer desenvolvedor. É uma solução elegante que realmente resolve um problema comum de forma nativa no Git, evitando retrabalho e garantindo profissionalismo.

Na DIO, valorizamos muito a busca por boas práticas e a otimização do fluxo de trabalho dos desenvolvedores. A capacidade de comportamentos diferentes para contextos diferentes, sem interferência entre eles que você descreve, é um exemplo claro de como o domínio de ferramentas pode impactar diretamente a produtividade e a segurança em projetos, seja no desenvolvimento pessoal ou profissional.

Qual a maior vantagem que você percebeu no seu dia a dia ao adotar essa organização de múltiplos perfis no Git, especialmente em relação à segurança ou conformidade em projetos corporativos?

William Silva
William Silva - 26/05/2025 10:17

Muito bom! 👊😎