Hace unos días en el trabajo estaba actualizando los repositorios de código en gitlab en mi laptop, y al llegar a casa y revisar mis códigos de proyectos personales, intenté actualizarlos, pero no funcionó. Resulta que por la configuración del correo de gitlab del trabajo, no era posible actualizar los repositorios, por lo tanto me fue necesario configurar ambas cuentas.
Ésta configuración la realicé en Fedora 28 x86_64 y utilizando zsh como interprete de comandos linux.
Paso 1:
Primero se deben generar las dos claves para los correos y obviamente darlas de alta en gitlab.com.
Para generar las claves, se utilizan el siguiente comando:
ssh-keygen -t rsa -C "correo@personal.com" -b 4096
ssh-keygen -t rsa -C "correo@trabajo.com" -b 4096
Al generar las claves se crean dos archivos uno con la llave pública (.pub)y otro con la llave privadas (rsa)
Para dar de alta una clave en gitlab, se accede al link https://gitlab.com/profile/keys
Paso 2:
Crear un archivo de config dentro la carpeta .ssh que está en la carpeta personal. Con la siguiente configuración:
En el archivo se agregan los dos correos que se utilizarán para la conexión.
Host gitlab.com-personal
HostName gitlab.com
User git
IdentityFile ~/.ssh/rsa@cuenta.personal
Host gitlab.com-trabajo
HostName gitlab.com
User git
IdentityFile ~/.ssh/rsa@cuenta.trabajo
Una vez agregado el archivo de configuración, se procede a realizar un prueba de conexión con el siguiente comando:
ssh -T git@gitlab.com-personal
ssh -T git@gitlab.com-trabajo
El mensaje que debe mostrar en caso de ser correcto, es el siguiente por cada cuenta configurada:
Welcome to GitLab, @Nombre-del-usuario-de-gitlab!
Paso 3:
Configurar cada repositorio para cada cuenta, los proyectos se pueden clonar de manera normal, pero para realizar una actualización, es necesario ir al proyecto, y buscar la carpeta .git y editar el archivo config de la siguiente manera:
Por ejemplo, el siguiente código es configuración para que se conecte con la cuenta de trabajo:
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
url = git@gitlab.com-trabajo:nom_repo/nom_deb_v3.0.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
[user]
name = Nombre de Usuario
email = cuenta@trabajo.com
Por ejemplo, el siguiente código es configuración para que se conecte con la cuenta de personal:
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
url = git@gitlab.com-personal:nom_repo/nom_deb_v3.0.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
[user]
name = Nombre de Usuario
email = cuenta@personal.com
Y con eso, se pueden hacer las actualizaciones de manera independiente de cada repositorio.
Si por ejemplo, se quiere clonar un proyecto con una cuenta en específica, se puede utilizar de la siguiente manera:
git@gitlab.com-personal:username1/test-project.git
Fuentes: