Un comando cambia account github
Questa soluzione prende la forma di un singolo alias git. Una volta eseguito, l'utente del progetto corrente verrà collegato a un altro account
Genera chiavi 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'
Collegali ai tuoi account GitHub / Bitbucket
- copia la chiave pubblica predefinita
pbcopy < ~/.ssh/id_rsa.pub
- accedi al tuo account GitHub
- incolla la chiave in
add SSH key
pagina di github
- copia altra chiave pubblica
pbcopy < ~/.ssh/id_rsa_pro.pub
- ripetere e adattare i passaggi da 2 a 4 per ogni altro account
Passaggio 1. Commutazione automatica dei tasti ssh.
Siamo in grado di configurare ssh
per inviare un uso una chiave di crittografia specifica a seconda del host
. La cosa bella è che puoi avere diversi alias per lo stessohostname
.
Vedi questo ~/.ssh/config
file di esempio :
# 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
configurazione remota git
Ora puoi usare questi alias nei telecomandi git cambiando git@github.com
per git@github_pro
.
Puoi modificare i telecomandi dei tuoi progetti esistenti (usando qualcosa di simile git remote set-url origin git@github_pro:foo/bar.git
) o adattarli direttamente durante la clonazione.
git clone git@github.com:ArnaudRinquin/atom-zentabs.git
usando alias, diventa:
git clone git@github_pro:ArnaudRinquin/atom-zentabs.git
Passaggio 2. Modifica di git user.email
Le impostazioni di configurazione di Git possono essere globali o per progetto. Nel nostro caso, vogliamo impostazioni per progetto. È molto facile cambiarlo:
git config user.email 'arnaud.rinquin@wopata.com'
Anche se questo è facile, ci vuole tempo per gli sviluppatori che siamo. Per questo possiamo scrivere un alias git molto semplice.
Lo aggiungeremo al ~/.gitconfig
file.
[user]
name = Arnaud Rinquin
email = rinquin.arnaud@gmail.com
...
[alias]
setpromail = "config user.email 'arnaud.rinquin@wopata.com'"
Quindi, tutto ciò che dobbiamo fare è git setpromail
cambiare la nostra e-mail solo per questo progetto.
Passaggio 3. Un interruttore di comando per favore ?!
Non sarebbe bello passare dall'account predefinito a uno specificato con un singolo comando senza parametri? Questo è sicuramente possibile. Questo comando prevede due passaggi:
- cambia i telecomandi del progetto corrente con gli alias scelti
- cambia la configurazione user.email del progetto corrente
Abbiamo già una soluzione a un comando per il secondo passaggio, ma il primo è molto più difficile. Un comando cambia l'host remoto
Ecco la soluzione sotto forma di un altro comando git alias da aggiungere al tuo ~/.gitconfig
:
[alias]
changeremotehost = !sh -c \"git remote -v | grep '$1.*fetch' | sed s/..fetch.// | sed s/$1/$2/ | xargs git remote set-url\"
Ciò consente di cambiare tutti i telecomandi da un host a un altro (l'alias). Vedi l'esempio:
$ > 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)
Uniscili tutti
Non ci resta che combinare i due comandi in uno solo, questo è abbastanza semplice. Guarda come integra anche la commutazione host 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 sorgente - Tutorial