🚧 Em Construção 🚧
Saltar al contenido principal

Firmar Commits

¿Por qué firmar commits?

Firmar commits es una práctica recomendada para garantizar la autenticidad e integridad de los commits. Esto es especialmente importante en proyectos de código abierto, donde cualquier persona puede contribuir con código.

Generar una clave GPG

Para generar una clave GPG, puedes usar el comando:

gpg --full-generate-key

Para listar las claves GPG, puedes usar el comando:

gpg --list-keys

Para exportar la clave GPG, puedes usar el comando:

gpg --export --armor <clave-gpg>

Copia la clave GPG

-----BEGIN PGP PUBLIC KEY BLOCK-----
...
-----END PGP PUBLIC KEY BLOCK-----

Para más detalles sobre cómo generar una nueva clave GPG, consulta Generar una nueva clave GPG.


Configurar Git para firmar commits automáticamente

CONSEJO: Si has configurado anteriormente Git para usar un formato de clave diferente al firmar con --gpg-sign, desmarca esta configuración para que se use el formato openpgp predeterminado.

git config --global --unset gpg.format

Para listar las claves GPG, puedes usar el comando:

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

Puedes configurar git para firmar commits automáticamente con el comando:

git config --global user.signingkey <clave-gpg>

Opcionalmente, para configurar Git para firmar todos los commits y etiquetas por defecto, ingresa el siguiente comando:

git config --global commit.gpgsign true
git config --global tag.gpgSign true

Consulta configurar Git para firmar commits automáticamente para más detalles.

Asociar la clave GPG con tu correo electrónico

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

Identifica la clave GPG que deseas asociar con tu correo electrónico.

gpg --edit-key <clave-gpg>

Agrega el correo electrónico que deseas asociar con la clave GPG.

gpg> adduid

Sigue las indicaciones para proporcionar tu nombre real, dirección de correo electrónico y cualquier comentario. Puedes modificar las entradas eligiendo N, C o E. Para mantener tu dirección de correo electrónico privada, usa tu dirección de correo electrónico no-reply proporcionada por GitHub. Para más información, consulta Configurar la dirección de correo electrónico del commit.

Real Name: TU NOMBRE REAL
Email address: tu@email.com
Comment: [opcional] TU COMENTARIO
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit?

Guarda los cambios.

gpg> save

Consulta cómo agregar una clave GPG a tu GitHub.

Firmar un nuevo commit

git commit -S -m "Descripción del commit"

Firmar un commit antiguo

Listar tus commits recientes

Usa el siguiente comando para ver el historial de commits:

git log --oneline

Esto listará los commits con sus hashes. Localiza el commit que deseas firmar.

Iniciar un rebase interactivo

Si el commit que deseas firmar está, por ejemplo, 3 commits atrás, ejecuta:

git rebase -i HEAD~3

Esto abrirá un editor con una lista de commits recientes.

Editar el commit

Encuentra el commit que deseas firmar y cambia pick por edit, así:

edit abc1234 Mensaje del commit

pick def5678 Otro commit
pick ghi9101 Un commit más

Guarda y cierra el editor.

Firmar el commit

Ahora, firma el commit con tu clave GPG:

git commit --amend --no-edit -S

Si necesitas especificar una clave particular, usa:

git commit --amend --no-edit -S -u TU_ID_GPG

Continuar el rebase

Después de firmar el commit, continúa el rebase con:

git rebase --continue

Si hay más commits para editar, repite el proceso.

Forzar push (si es necesario)

Si el commit ya ha sido enviado a un repositorio remoto, necesitarás forzar la actualización:

git push --force-with-lease

CONSEJO: --force-with-lease es más seguro que --force ya que evita sobrescribir cambios de otros colaboradores.