Skip to content

Instantly share code, notes, and snippets.

@flaudisio
Last active April 19, 2022 18:18
Show Gist options
  • Save flaudisio/8aca86049b4babbec500d37512655b19 to your computer and use it in GitHub Desktop.
Save flaudisio/8aca86049b4babbec500d37512655b19 to your computer and use it in GitHub Desktop.
Configuração de múltiplos e-mails e chaves SSH para repositórios locais do Git

Configuração de múltiplos e-mails e chaves SSH para repositórios locais do Git

Neste tutorial será considerado o seguinte cenário para seus repositórios locais do Git:

  • Você possui o Git 2.10.0 ou superior (detalhes abaixo).
  • Seus commits sempre terão o nome Fulano da Silva
  • Seus commits em repositórios pessoais devem usar o e-mail fulano.silva@gmail.com
  • Seus commits em repositórios do trabalho devem usar o e-mail fulano.silva@empresa.com.br
  • Você possui chaves SSH diferentes para projetos pessoais e projetos do trabalho
  • Tanto projetos pessoais quanto projetos do trabalho podem estar hospedados no GitHub, GitLab.com, etc.
    Exemplo 1: git@gitlab.com:fulano.silva/meu-projeto-pessoal.git
    Exemplo 2: git@gitlab.com:empresa/projeto.git
  • Você precisa usar git@github.com: e afins explicitamente...
  • ...e, por isso, ajustar o ~/.ssh/config não vai resolver seu problema :-(

1. Chaves SSH

Mantenha suas chaves SSH da seguinte forma:

Arquivo Descrição
~/.ssh/id_rsa Chave privada (pessoal)
~/.ssh/id_rsa.pub Chave pública (pessoal)
~/.ssh/id_rsa-empresa Chave privada (trabalho)
~/.ssh/id_rsa-empresa.pub Chave pública (trabalho)

Nota: o importante aqui é seguir o modelo ~/.ssh/<nome> e ~/.ssh/<nome>.pub para que o GNOME Keyring encontre e gerencie as chaves. Ajuste conforme necessário para o chaveiro/keyring do seu sistema.

2. Diretórios dos projetos

Aqui é assumida a seguinte organização de diretórios:

  • ~/projetos/empresa/*: diretório-raiz de todos os repositórios do trabalho.
    Exemplos: ~/projetos/empresa/Projeto-1; ~/projetos/empresa/meu-time/projeto-2

  • Quaisquer outros diretórios: projetos pessoais.
    Exemplos: ~/projetos/fulano/pessoal-1; ~/projetos/pessoal-2; /opt/outro-projeto

3. Configuração do Git

Arquivo ~/.gitconfig:

[user]
    name = Fulano da Silva
    email = fulano.silva@gmail.com

# Outras configurações...

# Mantenha as linhas abaixo no final do arquivo!
[includeIf "gitdir:~/projetos/empresa/"]
    path = ~/.gitconfig-empresa

Nota: a configuração includeIf foi introduzida no Git 2.13.0.

Arquivo ~/.gitconfig-empresa:

[user]
    email = fulano.silva@empresa.com.br
[core]
    sshCommand = ssh -i ~/.ssh/id_rsa-empresa

Nota: a configuração core.sshCommand foi introduzida no Git 2.10.0.

4. Conclusão

Em resumo, após a configuração acima, temos:

Repositório local Nome nos commits E-mail nos commits Chave SSH usada
~/projetos/empresa/Site/ Fulano da Silva fulano.silva@empresa.com.br ~/.ssh/id_rsa-empresa
~/projetos/empresa/Infra/Terraform/ Fulano da Silva fulano.silva@empresa.com.br ~/.ssh/id_rsa-empresa
~/projetos/pessoais/blog/ Fulano da Silva fulano.silva@gmail.com ~/.ssh/id_rsa
~/projetos/opensource/minha-app/ Fulano da Silva fulano.silva@gmail.com ~/.ssh/id_rsa
/qualquer/outro-repo/ Fulano da Silva fulano.silva@gmail.com ~/.ssh/id_rsa
@diegopaludo
Copy link

Muito bom! Maravilhoso! Usando!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment