Un interruptor de cuentas de github de comando
Esta solución toma la forma de un solo alias git. Una vez ejecutado, el usuario actual del proyecto se adjuntará a otra cuenta
Generar claves 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'
Vincúlelos a sus cuentas de GitHub / Bitbucket
- copiar clave pública predeterminada
pbcopy < ~/.ssh/id_rsa.pub
- inicie sesión en su cuenta de GitHub
- pegue la clave en la
add SSH key
página de github
- copiar otra clave pública
pbcopy < ~/.ssh/id_rsa_pro.pub
- repita y adapte los pasos 2 a 4 para cualquier otra cuenta
Paso 1. Cambio automático de clave ssh.
Podemos configurar ssh
para enviar un uso de una clave de cifrado específica según el host
. Lo bueno es que puedes tener varios alias para el mismo hostname
.
Ver este ~/.ssh/config
archivo de ejemplo :
# 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
configuración remota de git
Ahora puede usar estos alias en los controles remotos git cambiando git@github.com
por git@github_pro
.
Puede cambiar los controles remotos de sus proyectos existentes (usando algo como git remote set-url origin git@github_pro:foo/bar.git
) o adaptarlos directamente al clonarlos.
git clone git@github.com:ArnaudRinquin/atom-zentabs.git
usando alias, se convierte en:
git clone git@github_pro:ArnaudRinquin/atom-zentabs.git
Paso 2. Cambiar git user.email
La configuración de Git puede ser global o por proyecto. En nuestro caso, queremos una configuración por proyecto. Es muy fácil cambiarlo:
git config user.email 'arnaud.rinquin@wopata.com'
Si bien esto es fácil, lleva mucho tiempo para los desarrolladores que somos. Podemos escribir un alias git muy simple para eso.
Lo vamos a agregar al ~/.gitconfig
archivo.
[user]
name = Arnaud Rinquin
email = rinquin.arnaud@gmail.com
...
[alias]
setpromail = "config user.email 'arnaud.rinquin@wopata.com'"
Entonces, todo lo que tenemos que hacer es git setpromail
cambiar nuestro correo electrónico solo para este proyecto.
Paso 3. ¿Un interruptor de comando por favor?
¿No sería bueno cambiar de una cuenta predeterminada a una específica con un solo comando sin parámetros? Esto es definitivamente posible. Este comando tendrá dos pasos:
- cambiar los controles remotos del proyecto actual a los alias elegidos
- cambiar la configuración actual de user.email del proyecto
Ya tenemos una solución de un comando para el segundo paso, pero el primero es mucho más difícil. Un comando de cambio de host remoto
Aquí viene la solución en forma de otro comando git alias para agregar a su ~/.gitconfig
:
[alias]
changeremotehost = !sh -c \"git remote -v | grep '$1.*fetch' | sed s/..fetch.// | sed s/$1/$2/ | xargs git remote set-url\"
Esto permite cambiar todos los controles remotos de un host a otro (el alias). Mira el ejemplo:
$ > 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)
Combinarlos todos
Ahora solo tenemos que combinar los dos comandos en uno, esto es bastante fácil. Vea cómo también integro la conmutación de 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\"
Enlace de origen - Tutorial