Múltiplas Contas de Git

Existem certas situações em que é necessário fazer commits com diferentes contas, como, por exemplo: múltiplas chaves SSH por cada host de Git, usar o mesmo computador para trabalho e projetos pessoais, ou até ajudar alguém que não se queira que se saiba que o commit foi feito por outra pessoa 😜.

No meu caso, eu uso 1Password como o meu password manager. Como o me password manager permite gerir as minhas keys SSH e oferece um agent de SSH, posso configura o nosso servidor de SSH para fazer uso deste agente. Desta forma a configuração do meu SSH (~/.ssh/config) parecesse com algo como:

Host *
    IdentityAgent "~/Library/Group Containers/2BUA8C4S2C.com.1password/t/agent.sock"
Note

Estou a usar macOS para este artigo, mas o mesmo pode ser feito em qualquer outro sistema.

Agora que sabemos o estado por defeito do nosso sistema, vamos assumir que temos duas contas de Git, uma para trabalho e outra para projetos pessoais.

1. Criar a nova key para trabalho

Assumindo que já tenho a minha key para projetos pessoais e que esta é fornecida pelo meu 1Password, apenas tenho que gerar uma nova key para o meu trabalho. Para gerar a nova key podemos executar o comando:

ssh-keygen -t ed25519 -C "[email protected]"

Quando for pedido para especificar o caminho onde a chave será gravada teremos que assegurar que não destruimos nenhuma chave já existente. No meu carro o diretório está vazio uma vez que as minhas chaves não deixam o 1Password. Mesmo assim, vou guardar a chave com um nome mais sugestivo que iremos usar daqui em diante, id_work.

O próximo passo é adicionar a nova chave SSH à nossa conta, no host que a empresa está a usar. No meu caso é GitHub, então apenas tenho que seguir este artigo.

2. Configurar SSH para usar a nova chave

Como eu uso o GitHub pessoalmente, não posso simplesmente deixar o servidor de SSH decidir a chave a usar. Sem nenhuma alteração iria fazer uso da minha chave pessoal. Para resolver isto vamos adicionar um novo host no ficheiro ~/.ssh/config:

# work configuration
Host github.com-work
	Hostname github.com
	User git
	IdentifyFile ~/.ssh/id_work
	IdentitiesOnly yes

Como podem notar o host é algo que não existe, podemos olhar para isto como um alias, e o verdadeiro domínio é especificado em Hostname.

3. Configurar a Identidade do Git

O nosso próximo objetivo é fazer o clone de um dos repositórios do meu trabalho, mas teremos que substituir o github.com ou github.com-work - como anteriormente configurado.

git clone [email protected]/my-work/my-project.git work-project && cd work-project

Com o clone feito, falta-nos configurar um novo utilizador. Para isso, executamos git config --local -e e adicionamos:

[user]
	name = Gil Mendes
	email = [email protected]

Desta forma configuramos o utilizador que vai ser usado no repositório. O último passo é assegurar que o remote está com a informação correta. Para isso corremos o seguinte comando:

git remote set-url origin [email protected]:my-work/my-project.git

O mesmo pode ser conseguida modificando a config do Git local, como anteriormente (git config --local -e):

[remote "origin"]
	url = [email protected]:my-work/my-project.git
	fetch = +refs/heads/*:refs/remotes/origin/*

4. Conclusão

Com isto, todas as ações que faça de agora em diante iram usar o utilizador e a chave SSH que criamos. Usando esta técnica podemos ter duas ou mais chaves diferentes em uso simultaneamente.

Referências

#blog #git