Git com duas contas
Tags: git, github, ssh, sideprojects
Published: 2021-08-20 21:44:32

O git como ferramenta de gestão de código dispensa apresentações, mas vejo muitos profissionais com dificuldade em trabalhar com ele em duas contas, quem nunca fez um commit naquele projeto pessoal com o email da empresa que atire a primeira pedra.

Nota: O quê vai ser mostrado aqui funciona no 🪟 Windows também, mesmo usando `~` para representar a `$HOME` / `%USERPROFILE%` , confia.

## O basico

Primeiro vamos configurar a conta principal

primeiro vamos gerar nossas chaves

```dart
ssh-keygen -C "email-da-conta-principal@mail.com"
```

adicionar a chave publica no GitHub/AzureDevOps/Bitbuckt/GitLab/...

```bash
git config --global user.email "email-da-conta-principal@mail.com"
git config --global user.name "Nome na Conta Principal"
```

e pronto tudo certo para usar apenas uma conta

## Usando outro nome ou email

Vamos supor que você possui uma conta pessoal no GitHub e utiliza na empresa qualquer serviço diferente do GitHub como AzureDevOps/Bitbuckt/GitLab  o qual realmente é a situação de muita gente.

Nesse caso basta adicionarmos a mesma chave publica nos dois provedores. Mas como configurar o nome e email correto para cada um?

🤔

Uma solução é fazermos uma configuração local que vale apenas para aquele repositório, que queremos diferente da configuração global.

```bash
git clone git@github.com:minha-conta/meu-projeto
cd meu-projeto
git config --local user.email "email-da-conta-pessoal@mail.com"
git config --local user.nome "Nome da conta pessoal"
```

Obs: a flag `--local` pode ser omitida, o comando `git config ...`  sem a flag `--global` é local.

Uma solução um pouco mais elaborada é criar uma configuração global baseado no diretório em que os repositórios são armazenados.

arquivo `~/.gitconfig`

```bash
[user]
	name = Nome na Conta Principal
	email = email-da-conta-principal@mail.com

[includeIf "gitdir:~/repos_pessoais/"]
    path = ~/repos_pessoais/.gitconfig
```

arquivo `~/repos_pessoais/.gitconfig`

```bash
[user]
	name = Nome na Conta Pessoal
	email = email-da-conta-pessoal@mail.com
```

Para qualquer uma das duas soluções acima é possível testar se esta tudo certo executando o seguinte comando dentro de um repositório clonado:

```bash
git config --get user.email
git config --get user.name
```

## Usado duas contas no mesmo serviço

Agora vamos imaginar que você possui por exemplo uma conta pessoal no GitHub e uma conta com o email da empresa também no GitHub

para quem não percebeu a chave funciona com com Identificador único, então não podemos usar a mesma em duas contas do mesmo serviço, precisamos criar uma nova chave ssh.

vamos criar uma nova chave:

```bash
ssh-keygen -C "email-da-conta-pessoal@mail.com"
```

Durante a geração da chave precisamos passar um outro caminho para não sobrescrever a anterior.

Vamos cadastrar a nova chave publica na nossa conta.

caso não possua ainda um arquivo `config` na pasta `.ssh` na pasta do usuário vamos criar um mais ou menos assim

arquivo: `~/.ssh/config`

```bash
# Conta Default/Profissional GitHub
Host github.com
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_rsa

# Professional
Host github-pessoal.com
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_rsa_pessoal
```

No campo `Host` é um **alias** pode por qualquer nome mas no campo `HostName` precisa estar no domínio certo.

Agora para usar a conta principal não muda nada e para usar a conta pessoal precisamos utilizar o alias exemplo:

```bash
git clone git@github-pessoal.com:minha-conta/meu-projeto
```

Perceba que no lugar do host correto `github.com` utilizamos o alias `github-pessoal.com` 

E se você chegou até aqui Parabéns 🎉🎉🎉 , você é tipo o Julius pai do Chris que tem dois empregos.