Um comando github accounts switch
Essa solução assume a forma de um único alias do git. Uma vez executado, o usuário do projeto atual será anexado a outra conta
Gerar chaves ssh
ssh-keygen -t rsa -C "rinquin.arnaud@gmail.com" -f '/Users/arnaudrinquin/.ssh/id_rsa'
[...]
ssh-keygen -t rsa -C "arnaud.rinquin@wopata.com" -f '/Users/arnaudrinquin/.ssh/id_rsa_pro'
Vincule-os às suas contas GitHub / Bitbucket
- copiar chave pública padrão
pbcopy < ~/.ssh/id_rsa.pub
- Faça login na sua conta do GitHub
- cole a chave na
add SSH key
página do github
- copiar outra chave pública
pbcopy < ~/.ssh/id_rsa_pro.pub
- repita e adapte as etapas 2 a 4 para todas as outras contas
Etapa 1. Troca automática de chave ssh.
Podemos configurar ssh
para enviar um uso de uma chave de criptografia específica, dependendo do host
. O bom é que você pode ter vários aliases para o mesmo hostname
.
Veja este ~/.ssh/config
arquivo de exemplo :
# Default GitHub
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa
# Professional github alias
Host github_pro
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_pro
configuração remota git
Agora você pode usar esses aliases nos controles remotos git alterando git@github.com
por git@github_pro
.
Você pode alterar os controles remotos de seus projetos existentes (usando algo como git remote set-url origin git@github_pro:foo/bar.git
) ou adaptá-los diretamente ao cloná-los.
git clone git@github.com:ArnaudRinquin/atom-zentabs.git
usando o alias, ele se torna:
git clone git@github_pro:ArnaudRinquin/atom-zentabs.git
Etapa 2. Alterando o git user.email
As configurações do Git podem ser globais ou por projeto. No nosso caso, queremos uma configuração por projeto. É muito fácil mudar isso:
git config user.email 'arnaud.rinquin@wopata.com'
Embora isso seja fácil, leva muito tempo para os desenvolvedores que somos. Podemos escrever um alias git muito simples para isso.
Nós vamos adicioná-lo ao ~/.gitconfig
arquivo.
[user]
name = Arnaud Rinquin
email = rinquin.arnaud@gmail.com
...
[alias]
setpromail = "config user.email 'arnaud.rinquin@wopata.com'"
Então, tudo o que precisamos fazer é git setpromail
alterar nosso email apenas para este projeto.
Etapa 3. Uma chave de comando, por favor ?!
Não seria bom mudar da conta padrão para a conta especificada com um único comando sem parâmetros? Isso é definitivamente possível. Este comando terá duas etapas:
- alterar controles remotos do projeto atual para os aliases escolhidos
- alterar a configuração atual de user.email do projeto
Já temos uma solução de comando único para o segundo passo, mas o primeiro é muito mais difícil. Alteração de host remoto de um comando
Aí vem a solução na forma de outro comando git alias para adicionar ao seu ~/.gitconfig
:
[alias]
changeremotehost = !sh -c \"git remote -v | grep '$1.*fetch' | sed s/..fetch.// | sed s/$1/$2/ | xargs git remote set-url\"
Isso permite alterar todos os controles remotos de um host para outro (o alias). Veja o exemplo:
$ > git remote -v
origin git@github.com:ArnaudRinquin/arnaudrinquin.github.io.git (fetch)
origin git@github.com:ArnaudRinquin/arnaudrinquin.github.io.git (push)
$ > git changeremotehost github.com github_pro
$ > git remote -v
origin git@github_pro:ArnaudRinquin/arnaudrinquin.github.io.git (fetch)
origin git@github_pro:ArnaudRinquin/arnaudrinquin.github.io.git (push)
Combine todos eles
Agora só precisamos combinar os dois comandos em um, isso é bastante fácil. Veja como eu também integro a comutação de host de bitbucket.
[alias]
changeremotehost = !sh -c \"git remote -v | grep '$1.*fetch' | sed s/..fetch.// | sed s/$1/$2/ | xargs git remote set-url\"
setpromail = "config user.email 'arnaud.rinquin@wopata.com'"
gopro = !sh -c \"git changeremotehost github.com github_pro && git changeremotehost bitbucket.com bitbucket_pro && git setpromail\"
Link de origem - Tutorial