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 log
con la --show-signature
opció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é,gpg
no se han agregado subcomandos que se pasen de formagit
transparente ... No tengo ningún repositorio para probar, pero ¿git show --show-signature <commitish>
funciona?show_signature
solo agrega cosas a la salida (consulte github.com/git/git/blob/master/log-tree.c#L370 ).--raw
forgit verify-tag
/git verify-commit
. Vea mi respuesta a continuacióngit log
los códigos de estado introduce adicionalesE
,X
,Y
,R
deERRSIG
,EXPSIG
,EXPKEYSIG
, yREVKEYSIG
, de manera que un usuario del%G?
obtiene más información. Vea mi respuesta editada a continuacióngpg.minTrustLevel
puede 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-commit
ygit verify-tag
se pueden usar para verificar confirmaciones y etiquetas, respectivamente.fuente
Nota: hasta git 2.5
git verify-commit
ygit verify-tag
solo 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-format
documentació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.verifySignatures
variable 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 merge
pá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.format
eso se puede configurar en "openpgp
" o "x509
", ygpg.<format>.program
se 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 aopenpgp
travé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.minTrustLevel
se 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 gpg
pá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-shallow
después de ungit clone --depth 1 --no-local . shallow
Con 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
grep
ping 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 merge
verificar 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 merge
que 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