
🔐 Múltiples Claves GPG en Git
Cómo gestionar automáticamente claves GPG diferentes para trabajo y proyectos personales
¿Has visto alguna vez esos commits con la marca “Verified” en GitHub y te has preguntado cómo conseguirlo?
Yo quería conseguir eso en el trabajo, así que configuré GPG para firmar mis commits y me gustó tanto ver esa marca verde que pensé “esto también lo quiero en mis proyectos personales”.
El problema es que para el trabajo uso el email corporativo, pero para mis proyectos personales quiero usar el mío personal.
💡 La solución
Git tiene una característica llamada includeIf
que aplica configuraciones diferentes según el directorio donde estés. Básicamente le dices “si estoy en esta carpeta, usa esta configuración”. Así que vamos a ello…
1. 🔑 Crear las claves
Lo primero de todo, si no tienes claves GPG, es crearlas. En Mac uso GPG Keychain que hace todo más sencillo.
- Crear primera clave con tu email de trabajo
- Crear segunda clave con tu email personal
Te va a pedir contraseñas para ambas, y es mejor que las recuerdes bien porque la primera vez que hagas un commit con esta nueva configuración te las va a pedir.
2. 🔑 Añadir las claves a GitHub
Ahora nos vamos a nuestra configuración GPG de GitHub
- creamos una nueva GPG key para work pulsando en
New GPG key
- le ponemos un nombre,
work
en para este caso - copiamos nuestra recién creada key
- puedes copiarlas muy fácilmente desde GPG Keychain con botón derecho y
Copy
.repetimos el proceso para personal.
⚠️ Revisa que copies la key que corresponde desde GPG Keychain, el email te dará la clave.
Si usáis GitLab
, como es mi caso para este blog, y no, no sé qué razón me llevó a hacer tal cosa 🤷🏻♀️, funciona de la misma manera.
3. 🗂️ Organizar los proyectos
Separé físicamente mis proyectos, esto es esencial para utilizar después el includeIf
que te he comentado antes.
mkdir -p ~/work # Para el trabajo
mkdir -p ~/personal # Para proyectos personales
4. 🆔 Encontrar los IDs de las claves GPG
Esto lo puedes ver en la configuración GPG de GitHub (la captura de más arriba) o mediante este comando:
gpg --list-secret-keys --keyid-format LONG
Esto te muestra algo como:
sec rsa4096/1234567890ABCDEF 2023-01-01 [trabajo]
sec rsa4096/FEDCBA0987654321 2023-01-01 [personal]
El signingkey es lo que viene después de la /
en la línea que empieza por sec
.
5. ☝️ Crear configuraciones específicas
Para el trabajo (~/.gitconfig-work
):
[user]
name = Tu Nombre Profesional
email = tu-email@empresa.com
signingkey = 1234567890ABCDEF
[commit]
gpgsign = true
Para proyectos personales (~/.gitconfig-personal
):
[user]
name = Tu Nombre
email = tu-email-personal@gmail.com
signingkey = FEDCBA0987654321
[commit]
gpgsign = true
6. 🪄 Configuración condicional
Editas tu ~/.gitconfig
principal y añades:
[includeIf "gitdir:/Users/tu-usuario/work/"]
path = /Users/tu-usuario/.gitconfig-work
[includeIf "gitdir:/Users/tu-usuario/personal/"]
path = /Users/tu-usuario/.gitconfig-personal
Importante: Usa rutas absolutas, no ~
. Git a veces tiene problemas con la expansión de ~
en estas configuraciones.
Al final tu estructura de directorios queda así:
~/
├── work/
│ ├── proyecto-empresa-1/
│ └── proyecto-empresa-2/
├── personal/
│ ├── mi-app-personal/
│ └── otro-proyecto/
├── .gitconfig # Configuración con includeIf
├── .gitconfig-work # Configuración trabajo
└── .gitconfig-personal # Configuración personal
💫 ¡Y voilà!
Ahora cuando estoy en cualquier proyecto dentro de ~/personal/
, Git automáticamente usa mi email personal y mi clave GPG personal. Lo mismo para ~/work/
con la configuración de trabajo.
cd ~/personal/mi-app
git config user.email
# tu-email-personal@gmail.com
cd ~/work/proyecto-empresa
git config user.email
# tu-email@empresa.com
# Ver qué configuración está usando Git
git config --list --show-origin | grep user
# Verificar la última firma
git log --show-signature -1
⚠️ Problemas comunes
- Rutas: Asegúrate de usar rutas absolutas completas
- Configuración global: Elimina cualquier configuración global que interfiera:
git config --global --unset user.email git config --global --unset user.signingkey
- Repositorio: La configuración condicional solo funciona dentro de repositorios Git, no en carpetas vacías.