24 Firmas GPG

El campo de autor de un commit (see El modelo de objetos) es texto libre: cualquiera puede configurar git config user.name y user.email con el nombre de otra persona. Las firmas criptográficas permiten verificar que un commit o un tag realmente fue creado por quien dice ser su autor.

24.1 Firmar commits

git config --global user.signingkey CLAVE_GPG
git config --global commit.gpgsign true
git commit -S -m "mensaje"

Con commit.gpgsign true, todos los commits nuevos se firman automáticamente sin necesidad de la opción -S en cada llamada.

24.2 Firmar tags

git tag -s v2.1.0 -m "Versión 2.1.0"

A diferencia de un tag ligero (un simple puntero, see El modelo de objetos), un tag firmado incluye la firma dentro del propio objeto tag, por lo que persiste junto con el repositorio y puede verificarse en cualquier copia clonada.

24.3 Verificar firmas

git log --show-signature

Muestra el estado de la firma (válida, inválida, o ausente) junto a cada commit.

git verify-commit <hash>

Verifica la firma de un commit específico.

git verify-tag nombre-del-tag

Verifica la firma de un tag.

24.4 Qué garantiza una firma, y qué no

Una firma válida confirma que quien creó el commit tenía acceso a la clave privada correspondiente en el momento de firmarlo; no garantiza que el contenido del commit sea correcto ni que haya sido revisado por nadie. Sirve para verificar procedencia, no calidad. Es especialmente relevante en proyectos que aceptan contribuciones externas y quieren poder confirmar, más adelante, que un commit determinado realmente provino de quien figura como autor.