Cómo gestionar múltiples cuentas de Git (GitHub y GitLab) con diferentes llaves SSH y usuarios por carpeta
100 views
Tiempo de lectura: 3 min
Desarrollo
Git
Tutorial
2025-03-11
En este tutorial aprenderás a gestionar varias cuentas de Git (por ejemplo, una personal y una de empresa) utilizando diferentes claves SSH y configuraciones automáticas por carpeta, todo organizado para que no tengas que ir cambiando el usuario o los remotes a mano.
✅ Objetivo
- Tener una cuenta personal (GitHub y GitLab personal) con un mismo SSH.
- Tener una cuenta de empresa (GitLab) con una SSH diferente.
- Automatizar el
user.name
yuser.email
según la carpeta. - Usar remotes diferenciados con el SSH correcto, especialmente para la empresa.
1. 🔑 Crear y configurar las llaves SSH
Primero, generamos las llaves (si ya lo hiciste, puedes saltarte este paso).
1.1. Generar llave SSH personal
ssh-keygen -t rsa -b 4096 -C "tu-email-personal@example.com" -f ~/.ssh/id_rsa
1.2. Generar llave SSH de empresa
ssh-keygen -t rsa -b 4096 -C "tu-email-empresa@example.com" -f ~/.ssh/id_rsa_empresa1
1.3. Agregar las llaves a los agentes SSH
# Personal
ssh-add ~/.ssh/id_rsa
# Empresa
ssh-add ~/.ssh/id_rsa_empresa1
1.4. Subir las claves públicas a las plataformas
- GitHub/GitLab personal: Subir `~/.ssh/id_rsa.pub`.
- GitLab empresa: Subir `~/.ssh/id_rsa_empresa1.pub`.
2. ⚙️ Configurar SSH para usar las llaves correctas
Edita (o crea) el archivo `~/.ssh/config`:
nano ~/.ssh/config
Añade:
# Cuenta Personal (GitHub y GitLab Personal)
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa
Host gitlab.com
HostName gitlab.com
User git
IdentityFile ~/.ssh/id_rsa
# Cuenta de Empresa (GitLab Empresa)
Host gitlab.com-empresa1
HostName gitlab.com
User git
IdentityFile ~/.ssh/id_rsa_empresa1
⚠️ Importante: Usar `gitlab.com-empresa1` como host para distinguirlo al clonar.
3. 👤 Configurar `user.name` y `user.email` según carpeta
Edita o crea el archivo `~/.gitconfig` global:
[user]
name = Tu Nombre Personal
email = tu-email-personal@example.com
[includeIf "gitdir:~/Developer/empresa1/"]
path = ~/.gitconfig-empresa1
Crea el archivo `~/[CarpetaEmpresa]/.gitconfig`:
[user]
name = Tu Nombre Empresa
email = tu-email-empresa@example.com
4. 🚀 Clonar correctamente los repositorios
4.1. Cuenta personal (GitHub y GitLab personal)
git clone git@github.com:usuario/repositorio.git
git clone git@gitlab.com:usuario/repositorio.git
4.2. Cuenta empresa (GitLab empresa usando host personalizado)
git clone git@gitlab.com-empresa1:empresa/repositorio.git
5. 🛠️ Corregir remotes de proyectos antiguos (script automático)
5.1. Crear el script
#!/bin/bash
# Ruta base donde están los repositorios de empresa
BASE_DIR=~/Developer/empresa1
# Buscar todos los .git
find "$BASE_DIR" -type d -name ".git" | while read gitdir; do
repo_dir=$(dirname "$gitdir")
echo "Corrigiendo remote en: $repo_dir"
cd "$repo_dir"
# Obtener remote actual
current_remote=$(git remote get-url origin)
# Reemplazar si es necesario
if [["$current_remote" == *"gitlab.com"* && "$current_remote" != *"gitlab.com-empresa1"*]]; then
new_remote=${current_remote/git@gitlab.com:/git@gitlab.com-empresa1:}
echo "Cambiando remote de: $current_remote a: $new_remote"
git remote set-url origin "$new_remote"
else
echo "Remote ya correcto o no es gitlab: $current_remote"
fi
done
5.2. Hacerlo ejecutable
chmod +x fix-remotes.sh
5.3. Ejecutar
./fix-remotes.sh
6. ✅ Automatización al clonar (alias útil)
Alias en `/.bashrc` o `/.zshrc`:
alias gitempresa1='git clone git@gitlab.com-empresa1:'
Usar:
gitempresa1 empresa/repositorio.git
Con esta configuración tendrás todo organizado para trabajar con múltiples cuentas de Git sin confusiones. 🎉