Con versiones más recientes de git , es posible firmar confirmaciones individuales (además de etiquetas) con una clave PGP:
git commit -m "some message" -S
Y puede mostrar estas firmas en la salida de git logcon la --show-signatureopción:
$ git log --show-signature
commit 93bd0a7529ef347f8dbca7efde43f7e99ab89515
gpg: Signature made Fri 28 Jun 2013 02:28:41 PM EDT using RSA key ID AC1964A8
gpg: Good signature from "Lars Kellogg-Stedman <[email protected]>"
Author: Lars Kellogg-Stedman <[email protected]>
Date: Fri Jun 28 14:28:41 2013 -0400
this is a test
Pero, ¿hay alguna manera de verificar programáticamente la firma en una confirmación determinada que no sea grepping la salida de git log? Estoy buscando el equivalente de confirmación de git tag -v: algo que proporcione un código de salida que indique si hubo o no una firma válida en una determinada confirmación.

git commit ...ygit log .... Hasta donde yo sé,gpgno se han agregado subcomandos que se pasen de formagittransparente ... No tengo ningún repositorio para probar, pero ¿git show --show-signature <commitish>funciona?show_signaturesolo agrega cosas a la salida (consulte github.com/git/git/blob/master/log-tree.c#L370 ).--rawforgit verify-tag/git verify-commit. Vea mi respuesta a continuacióngit loglos códigos de estado introduce adicionalesE,X,Y,RdeERRSIG,EXPSIG,EXPKEYSIG, yREVKEYSIG, de manera que un usuario del%G?obtiene más información. Vea mi respuesta editada a continuacióngpg.minTrustLevelpuede ayudar cuando se usagit verify-tag/verify -commit. Vea mi respuesta editada a continuación .Respuestas:
En caso de que alguien llegue a esta página a través de un motor de búsqueda, como lo hice yo: se han puesto a disposición nuevas herramientas en los dos años desde que se publicó la pregunta: ahora hay comandos git para esta tarea:
git verify-commitygit verify-tagse pueden usar para verificar confirmaciones y etiquetas, respectivamente.fuente
Nota: hasta git 2.5
git verify-commitygit verify-tagsolo muestra un mensaje legible por humanos.Si desea automatizar la verificación, git 2.6+ (Q3 2015) agrega otra salida.
Consulte confirmar e18443e , confirmar aeff29d , confirmar ca194d5 , confirmar 434060e , confirmar 8e98e5f , confirmar a4cc18f , confirmar d66aeff (21 de junio de 2015) por brian m. carlson (
bk2204) .(Combinado por Junio C Hamano -
gitster- en el compromiso ba12cb2 , 03 de agosto de 2015)Más:
git 2.9 (junio de 2016) actualice el documento de fusión de git :
Véase el compromiso 05a5869 (13 de mayo de 2016) de Keller Fuchs (``) .
Ayudado por: Junio C Hamano (
gitster) .(Combinado por Junio C Hamano -
gitster- en el compromiso be6ec17 , 17 de mayo de 2016)Actualización de Git 2.10 (tercer trimestre de 2016)
Consulte la confirmación b624a3e (16 de agosto de 2016) de Linus Torvalds (
torvalds) .(Combinado por Junio C Hamano -
gitster- en el compromiso 83d9eb0 , 19 de agosto de 2016)Git 2.11+ (Q4 2016) será aún más preciso.
Consulte la confirmación 661a180 (12 de octubre de 2016) de Michael J Gruber (
mjg) .(Combinado por Junio C Hamano -
gitster- en el compromiso 56d268b , 26 de octubre de 2016)La
git pretty-formatdocumentación ahora incluye:Git 2.12 (Q1 2017) "
git tag" y "git verify-tag" aprendieron a poner el estado de verificación de GPG en su--format=<placeholders>formato de salida " " .Ver commit 4fea72f , commit 02c5433 , commit ff3c8c8 (17 de enero de 2017) por Santiago Torres (
SantiagoTorres) .Consulte la confirmación 07d347c , la confirmación 2111aa7 , la confirmación 94240b9 (17 de enero de 2017) de Lukas Puehringer (``) .
(Combinado por Junio C Hamano -
gitster- en el compromiso 237bdd9 , 31 de enero de 2017)Git 2.16 (Q1 2018) permitirá que la verificación de la firma de confirmación sea aún más automatizada, con la
merge.verifySignaturesvariable de configuración.Ver commit 7f8ca20 , commit ca779e8 (10 de diciembre de 2017) de Hans Jerry Illikainen (``) .
(Combinado por Junio C Hamano -
gitster- en el compromiso 0433d53 , 28 de diciembre de 2017)La
git mergepágina del manual de configuración ahora dice:Git 2.19 (tercer trimestre de 2018) es aún más útil, ya que se les ha enseñado a "
git verify-tag" y "git verify-commit" a usar el estado de salida de "gpg --verify" subyacente para señalar una firma incorrecta o no confiable que encontraron.Nota: con Git 2.19,
gpg.formateso se puede configurar en "openpgp" o "x509", ygpg.<format>.programse usa para especificar qué programa usar para manejar el formato) para permitir que los certificados x.509 con CMS a través de "gpgsm" se usen en lugar de aopenpgptravés de "gnupg".Consulte la confirmación 4e5dc9c (09 de agosto de 2018) de Junio C Hamano (
gitster) .Ayudado por: Vojtech Myslivec (
VojtechMyslivec) , brian m. carlson (bk2204) y Jeff King (peff) .(Combinado por Junio C Hamano -
gitster- en el compromiso 4d34122 , 20 de agosto de 2018)En el lado de la confianza, hay progreso:
con Git 2.26 (Q1 2020),
gpg.minTrustLevelse introdujo una variable de configuración para indicar a varias rutas de código de verificación de firmas el nivel mínimo de confianza requerido.Consulte la confirmación 54887b4 (27 de diciembre de 2019) de Hans Jerry Illikainen (
illikainen) .(Combinado por Junio C Hamano -
gitster- en el compromiso 11ad30b , 30 de enero de 2020)La
git config gpgpágina de manual ahora incluye:Con Git 2.26 (Q1 2020) , "
git show" y otros dieron un nombre de objeto en formato sin formato en su salida de error, que se ha corregido para darlo en hexadecimal.Probado con
git -C shallow log --graph --show-signature -n1 plain-shallowdespués de ungit clone --depth 1 --no-local . shallowCon Git 2.27 (Q2 2020), el código para interactuar con GnuPG se ha refactorizado.
Consulte la confirmación 6794898 , la confirmación f1e3df3 (4 de marzo de 2020) de Hans Jerry Illikainen (
illikainen) .(Combinado por Junio C Hamano -
gitster- en commit fa82be9 , 27 de marzo de 2020)fuente
Una inspección superficial del código sugiere que no existe tal método directo.
Todas las pruebas en la fuente de git se basan en hacer
grepping a la salida degit show(consulte t / t7510-signed-commit.sh para las pruebas).Puede personalizar la salida con algo como
--pretty "%H %G?%"para facilitar el análisis.Parece que puede solicitar
git mergeverificar una firma, pero nuevamente, sus pruebas se basan engrep(consulte t / t7612-merge-verify-signatures.sh ). Parece que una firma no válida harágit mergeque salga con una mala firma, por lo que hoy podría solucionar esto haciendo una combinación de prueba en algún lugar y descartando esa combinación, pero eso parece peor que simplemente llamar a grep.fuente