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
[email protected]
- Seus commits em repositórios do trabalho devem usar o e-mail
[email protected]
- 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:[email protected]:fulano.silva/meu-projeto-pessoal.git
Exemplo 2:[email protected]:empresa/projeto.git
- Você precisa usar
[email protected]:
e afins explicitamente... - ...e, por isso, ajustar o
~/.ssh/config
não vai resolver seu problema :-(
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.
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
Arquivo ~/.gitconfig
:
[user]
name = Fulano da Silva
email = [email protected]
# 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 = [email protected]
[core]
sshCommand = ssh -i ~/.ssh/id_rsa-empresa
Nota: a configuração core.sshCommand
foi introduzida no Git 2.10.0.
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 |
[email protected] |
~/.ssh/id_rsa-empresa |
~/projetos/empresa/Infra/Terraform/ |
Fulano da Silva |
[email protected] |
~/.ssh/id_rsa-empresa |
~/projetos/pessoais/blog/ |
Fulano da Silva |
[email protected] |
~/.ssh/id_rsa |
~/projetos/opensource/minha-app/ |
Fulano da Silva |
[email protected] |
~/.ssh/id_rsa |
/qualquer/outro-repo/ |
Fulano da Silva |
[email protected] |
~/.ssh/id_rsa |
Muito bom! Maravilhoso! Usando!