Introducción
Hola. Hoy veremos algunas configuraciones para trabajar con repositorios de diferentes cuentas de GitHub o GitLab.
Git y GitHub nos sugieren una configuración global y general que es útil para la gran mayoría de los usuarios:
- Instalar Git
- Configurar el name y el email globales para la firma de commits
- Generar keys SSH personales
- Configurar las keys en GitHub
- Clonar el repo con SSH
- Ser felices
Sin embargo, hay un caso más o menos común en el que, ya sea por el trabajo o proyectos personales, tenemos que trabajar con diferentes cuentas de GitHub o GitLab, con diferente usuario o correo en la firma, y desde la misma computadora.
Resúmen
El truco es simple. Se trata de algunos ajustes de configuración SSH y de Git:
- (SSH) Generar una key SSH diferente para cada cuenta de GitHub
- (SSH) Crear un archivo de configuración SSH global
- (Git) Configurar el remote origin de cada repositorio
- (Git) Settear el name y el email para cada repositorio
⚠️ Consideraciones
En este post usaremos el remote con SSH. Si ya clonaste el repositorio usando la opción HTTPS dirígete al final del post para cambiar la URL del remote y poder continuar con el tutorial.
Para verificar qué tipo de clonación escogiste cuando clonaste el repo, lo puedes averiguar llendo a tu repositorio en la terminal y usando el comando git remote -v
:
En este ejemplo podemos ver que en la salida aparece https, lo que significa que tendríamos que cambiar la url para que sea ssh.
# Navegar al repositorio
cd ~/Documents/work/git-tricks-and-tutorials
# Mostrar el remote
git remote -v
# origin https://github.com/ChemaCLi/git-tricks-and-tutorials.git (fetch)
# origin https://github.com/ChemaCLi/git-tricks-and-tutorials.git (push)
Objetivo del ejercicio
Supongamos que tenemos 2 cuentas de GitHub: Una cuenta personal y una cuenta del trabajo. Lo que haremos es crear una configuración personal
para la cuenta personal, y una configuración work
para la cuenta de nuestro trabajo.
1. Generar y preparar las nuevas keys SSH
Lo primero que debemos hacer es navegar a la carpeta .ssh
de nuestra computadora.
El directorio .ssh
debe estar en la ruta raíz de tu usuario. Si no la puedes ver, asegúrate de que la opción "Ver archivos ocultos" esté habilitada en tu Sistema Operativo (MacOS, Linux o Windows).
Dentro del directorio .ssh
encontrarás los archivos id_rsa
y id_rsa.pub
.
Si no existen, revisa la sección de Consideraciones
de este post por favor.
En mi caso estas son las keys que uso para mis proyectos personales, así que crearé una carpeta personal
para colocarlas allí, y crearé una carpeta work
para la cuenta del trabajo
Lo siguiente será crear una nueva key SSH para el trabajo (usando el email de mi trabajo) con los siguientes comandos:
# Navega a la carpeta .ssh/work
cd ~/.ssh/work
# Genera la nueva key allí dentro
ssh-keygen -t rsa -b 4096 -C "chema@devu.community"
Al presionar Enter nos preguntará qué nombre le queremos dar al archivo. Te sugiero que le pongas el nombre de la empresa de tu trabajo para evitar confusiones. Usaré "devu" en mi caso.
Enter file in which to save the key (/Users/chema/.ssh/id_rsa): devu
Presiona Enter un par de veces para continuar sin poner una contraseña, o especifica una si lo prefieres.
Ahora tendrás tus keys ssh organizadas de esta manera:
Lo siguiente por hacer es agregar la nueva SSH key en tu cuenta de GitHub del trabajo. Si no sabes cómo hacerlo, puedes seguir las instrucciones del paso 4 de la guía que escribí en este otro post:
Cómo instalar y configurar Git y SSH con GitHub en Mac, GNU/Linux o Windows (GitBash)
José María CL ・ Jan 9 '22
2. Archivo config SSH
La clave y la magia de todo lo que estamos haciendo recae en gran parte sobre este paso, así que presta atención.
Crea un archivo de texto plano con el nombre config
dentro de tu carpeta .ssh
. Asegúrate de que no tenga la extensión .txt
o cualquier otra. El nombre del archivo debe ser config
únicamente.
Ahora ábrelo con el editor de texto de tu preferencia (Bloc de notas, Editor, VSCode, Sublime Text, etc.) y escribe este contenido, poniendo el nombre de tu empresa en lugar de "devu":
# Configuracion de GitHub para mi cuenta Personal
Host github.com-personal
HostName github.com
User git
IdentityFile ~/.ssh/personal/id_rsa
# Configuracion de GitHub para mi trabajo en Devu
Host github.com-work
HostName github.com
User git
IdentityFile ~/.ssh/work/devu
Guarda los cambios y cierra el archivo.
Presta mucha atención a este detalle. Estamos usando un Host github.com-personal
y un Host github.com-work
. El sufijo -personal
y -work
le servirá a Git para escoger qué keys usar más adelante.
Además, el IdentityFile de cada configuración debe coincidir con los nombres de las carpetas y keys que creamos.
3. Configurar el remote origin del repositorio
Escribe en la terminal los siguientes comandos para navegar a tu repositorio, verificar la URL
del remote
origin
, y modificarla para que utilice la configuración work
que definimos en el paso 2.
Para este ejercicio usaré un repositorio llamado "git-tricks-and-tutorials", y tú deberías usar el repositorio que te interesa configurar.
# Navegar al repositorio
cd ~/Documents/work/git-tricks-and-tutorials/
# Verificar el remote origin
git remote -v
# Aparecerá algo como esto
# origin git@github.com:ChemaCLi/git-tricks-and-tutorials.git (fetch)
# origin git@github.com:ChemaCLi/git-tricks-and-tutorials.git (push)
# Modificar la URL para que ahora use el host github.com-work
git remote set-url origin git@github.com-work:ChemaCLi/git-tricks-and-tutorials.git
Ahora verifica la nueva configuración del remote origin de Git.
git remote -v
# origin git@github.com-work:ChemaCLi/git-tricks-and-tutorials.git (fetch)
# origin git@github.com-work:ChemaCLi/git-tricks-and-tutorials.git (push)
Y finalmente valida que puedas comunicarte con GitHub haciendo git pull:
git pull --ff
# Already up to date.
Si te arroja un error, por favor escríbelo en los comentarios y responderé de inmediato para ayudarte y corregir la guía.
4. Settear firma de Git para el repositorio actual
Último paso para detalles finos. Si has logrado llegar hasta aquí, felicidades! solo nos queda un pequeño detalle más para contar con una configuración completa.
Vamos a hacer que el nombre y el email que aparecen en cada commit sea diferente para nuestro repositorio (en este caso el repo del trabajo)
Ingresa estos comandos para settear tu firma para el repositorio del trabajo:
git config user.email chema@devu.community
git config user.name ChemaCL
Verifica la configuración con el comando git config --list
:
# Esta configuración aparecerá hasta abajo
remote.origin.url=git@github.com-work:ChemaCLi/git-tricks-and-tutorials.git
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.main.remote=origin
branch.main.merge=refs/heads/main
user.email=chema@devu.community
user.name=ChemaCLi
Lo lograste! a partir de ahora cuando hagas pull
o push
usarás la SSH de tu trabajo para el repositorio del trabajo, y firmarás tus commits con los datos de tu trabajo.
Ahora intenta configurar el remote origin tus repositorios de tu cuenta personal para que usen la ssh de la carpeta personal
. Puedes lograrlo siguiendo el paso 3 de esta guía. También recuerda que debes modificar el remote origin de todos los repositorios que hayas clonado. Pero descuida, solo tienes que hacerlo cuando lo necesites, no vayas a enloquecer.
Si algo falló, revisa bien tus configuraciones para descargar errores en los nombres de archivos y carpetas.
Si tienes dudas, correcciones o sugerencias, envía tus comentarios de manera respetuosa y los atenderé en cuanto me sea posible. Éxito!
Cambiar de HTTPS a SSH
Lo primero que debes hacer es verificar si ya tienes configurada una key SSH antes de continuar. También tendrás que asegurarte de configurar la key en la cuenta de GitHub del repositorio que estás intentando cambiar.
Para ello te recomiendo seguir esta otra guía a partir del paso 3:
Cómo instalar y configurar Git y SSH con GitHub en Mac, GNU/Linux o Windows (GitBash)
José María CL ・ Jan 9 '22
Cuando tu key SSH esté configurada en GitHub, lo siguiente es dirigirte a tu repositorio en GitHub, buscar la opción Clone
y copiar la URL ssh.
En este caso mi URL para trabajar con SSH es esta:
git@github.com:ChemaCLi/git-tricks-and-tutorials.git
Ahora debes navegar al directorio en donde se encuentre clonado tu repositorio y asignar la nueva URL al remote origin
.
git remote set-url origin git@github.com:ChemaCLi/git-tricks-and-tutorials.git
Listo, ya estás usando ssh a partir de ahora. Para verificar la configuración escribe el comando git remote -v
y deberías ver una salida como la siguiente:
git remote -v
# origin git@github.com:ChemaCLi/git-tricks-and-tutorials.git (fetch)
# origin git@github.com:ChemaCLi/git-tricks-and-tutorials.git (push)
Recuerda que un remote
es simplemente un repositorio remoto con el que te puedes comunicar para sincronizar cambios. Y el remote
llamado origin
es simplemente el remote
principal.