David San Luis

Cómo firmar automáticamente tus commits en Git con GPG

David San Luis Aguirre 2 min read

Firmar tus commits con GPG (GNU Privacy Guard)

1. Generar una clave GPG

$CODE_HEADER_PLACEHOLDER$
gpg --full-generate-key

¿Por qué?
Este comando genera un nuevo par de claves GPG (pública y privada).

Opciones recomendadas:

  • Tipo: RSA y RSA
  • Tamaño: 4096 bits (más seguro)
  • Expiración: Puedes elegir 1 año o indefinido
  • Nombre y correo: deben coincidir exactamente con los que usas en Git

2. Listar tus claves GPG

$CODE_HEADER_PLACEHOLDER$
gpg --list-secret-keys --keyid-format=long

¿Por qué?
Para obtener el ID de la clave que usaremos con Git.

¿Qué buscar?
Una salida como esta:

$CODE_HEADER_PLACEHOLDER$
/home/user/.gnupg/secring.gpg
------------------------------------
sec   4096R/6BF8308AAAABEA3A 2025-11-29

La parte después del slash (/) es tu clave: 6BF8308AAAABEA3A → la necesitaremos más adelante.


3. Configurar Git para firmar automáticamente

Si ya tenías configuraciones previas que interfieren (como SSH):

$CODE_HEADER_PLACEHOLDER$
git config --global --unset gpg.format

Ahora agrega tu clave:

$CODE_HEADER_PLACEHOLDER$
git config --global user.signingkey TU_CLAVE_ID

(Ejemplo: 6BF8308AAAABEA3A)

Habilita el firmado automático:

$CODE_HEADER_PLACEHOLDER$
git config --global commit.gpgSign true

Asegura que Git use gpg:

$CODE_HEADER_PLACEHOLDER$
git config --global gpg.program gpg

Configura tu nombre y correo:

$CODE_HEADER_PLACEHOLDER$
git config --global user.name "Tu Nombre"
git config --global user.email "tu-correo@example.com"

Importante: Asegúrate de que este correo coincida con el de la clave GPG y el usado en GitHub.


4. Exportar tu clave pública (para añadirla a GitHub)

$CODE_HEADER_PLACEHOLDER$
gpg --armor --export tu-correo@example.com

¿Por qué?
Esto genera tu clave pública en texto plano, la cual puedes subir a tu cuenta de GitHub en:
Settings → SSH and GPG Keys → New GPG Key


5. Verifica que Git está firmando correctamente

Haz un commit sin usar -S manualmente. Luego verifica con:

$CODE_HEADER_PLACEHOLDER$
git log --show-signature

Deberías ver algo como:

$CODE_HEADER_PLACEHOLDER$
gpg: Firmado el Sat Nov 29 14:57:12 2025 CST
gpg:                usando RSA clave A3F9D21C7B8E44F119C52EA0D7F4419B3E6A8F12
gpg: Imposible comprobar la firma: No hay clave pública

6. Ver configuración actual (opcional)

$CODE_HEADER_PLACEHOLDER$
git config --global --list

Te mostrará algo similar a:

$CODE_HEADER_PLACEHOLDER$
user.name=yourUserName
user.email=tu-correo@example.com
user.signingkey=6BF8308AAAABEA3A
commit.gpgSign=true
gpg.program=gpg