Avec les nouvelles versions de, git
il est possible de signer des commits individuels (en plus des balises) avec une clé PGP:
git commit -m "some message" -S
Et vous pouvez afficher ces signatures dans la sortie de git log
avec l' --show-signature
option:
$ 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
Mais y a-t-il un moyen de vérifier par programme la signature sur un commit donné autrement qu'en grepping la sortie de git log
? Je recherche l'équivalent de commit de git tag -v
- quelque chose qui fournira un code de sortie indiquant s'il y avait ou non une signature valide sur un commit donné.
git commit ...
etgit log ...
. Autant que je sache,gpg
n'a pas ajouté de sous-commandes qui sont transmises de manièregit
transparente ... Je n'ai pas de repos à tester, mais celagit show --show-signature <commitish>
fonctionne-t-il?show_signature
n'ajoute que des éléments à la sortie (voir github.com/git/git/blob/master/log-tree.c#L370 ).--raw
pourgit verify-tag
/git verify-commit
. Voir ma réponse cigit log
introduit des codes d'état supplémentairesE
,X
,Y
,R
pourERRSIG
,EXPSIG
,EXPKEYSIG
etREVKEYSIG
, de sorte qu'un utilisateur%G?
obtient plus d' informations. Voir ma réponse modifiée cigpg.minTrustLevel
peut aider lors de l'utilisation degit verify-tag
/verify -commit
. Voir ma réponse modifiée ci-dessous .Réponses:
Juste au cas où quelqu'un accède à cette page via un moteur de recherche, comme je l'ai fait: de nouveaux outils ont été mis à disposition dans les deux ans qui ont suivi la publication de la question: il existe maintenant des commandes git pour cette tâche:
git verify-commit
etgit verify-tag
peuvent être utilisées pour vérifier les commits et balises, respectivement.la source
Remarque: jusqu'à git 2.5,
git verify-commit
etgit verify-tag
n'affichait qu'un message lisible par l'homme.Si vous souhaitez automatiser la vérification, git 2.6+ (Q3 2015) ajoute une autre sortie.
Voir commit e18443e , commit aeff29d , commit ca194d5 , commit 434060e , commit 8e98e5f , commit a4cc18f , commit d66aeff (21 juin 2015) par brian m. carlson (
bk2204
) .(Merged by Junio C Hamano -
gitster
- in commit ba12cb2 , 03 août 2015)Plus:
git 2.9 (juin 2016) met à jour le document git merge :
Voir commit 05a5869 (13 mai 2016) de Keller Fuchs (``) .
Aide: Junio C Hamano (
gitster
) .(Fusionné par Junio C Hamano -
gitster
- dans commit be6ec17 , 17 mai 2016)Mise à jour de Git 2.10 (T3 2016)
Voir commit b624a3e (16 août 2016) par Linus Torvalds (
torvalds
) .(Fusionné par Junio C Hamano -
gitster
- in commit 83d9eb0 , 19 août 2016)Git 2.11+ (Q4 2016) sera encore plus précis.
Voir commit 661a180 (12 octobre 2016) par Michael J Gruber (
mjg
) .(Fusionné par Junio C Hamano -
gitster
- dans commit 56d268b , 26 oct 2016)La
git pretty-format
documentation comprend désormais:Git 2.12 (Q1 2017) "
git tag
" et "git verify-tag
" ont appris à mettre le statut de vérification GPG dans leur "--format=<placeholders>
" format de sortie .Voir commit 4fea72f , commit 02c5433 , commit ff3c8c8 (17 janvier 2017) par Santiago Torres (
SantiagoTorres
) .Voir commit 07d347c , commit 2111aa7 , commit 94240b9 (17 janvier 2017) par Lukas Puehringer (``) .
(Fusionné par Junio C Hamano -
gitster
- dans commit 237bdd9 , 31 janvier 2017)Git 2.16 (Q1 2018) permettra à la vérification de la signature de validation d'être encore plus automatisée, avec la
merge.verifySignatures
variable de configuration.Voir commit 7f8ca20 , commit ca779e8 (10 décembre 2017) par Hans Jerry Illikainen (``) .
(Fusionné par Junio C Hamano -
gitster
- dans commit 0433d53 , 28 déc 2017)La
git merge
page de manuel de configuration se lit maintenant:Git 2.19 (Q3 2018) est encore plus utile, car "
git verify-tag
" et "git verify-commit
" ont appris à utiliser le statut de sortie du sous-jacent "gpg --verify
" pour signaler une signature incorrecte ou non approuvée qu'ils ont trouvée.Remarque: avec Git 2.19,
gpg.format
qui peut être défini sur "openpgp
" ou "x509
", etgpg.<format>.program
qui est utilisé pour spécifier le programme à utiliser pour gérer le format) pour permettre l'utilisation des certificats x.509 avec CMS via "gpgsm
" au lieu deopenpgp
via "gnupg
".Voir commit 4e5dc9c (09 août 2018) par Junio C Hamano (
gitster
) .Aide: Vojtech Myslivec (
VojtechMyslivec
) , brian m. carlson (bk2204
) et Jeff King (peff
) .(Merged by Junio C Hamano -
gitster
- in commit 4d34122 , 20 août 2018)Du côté de la confiance, il y a des progrès:
avec Git 2.26 (Q1 2020),
gpg.minTrustLevel
une variable de configuration a été introduite pour indiquer à divers chemins de code de vérification de signature le niveau de confiance minimum requis.Voir commit 54887b4 (27 décembre 2019) par Hans Jerry Illikainen (
illikainen
) .(Fusionné par Junio C Hamano -
gitster
- dans commit 11ad30b , 30 janvier 2020)La
git config gpg
page de manuel comprend désormais:Avec Git 2.26 (Q1 2020) , "
git show
" et d'autres ont donné un nom d'objet au format brut dans sa sortie d'erreur, qui a été corrigé pour le donner en hexadécimal.Testé avec
git -C shallow log --graph --show-signature -n1 plain-shallow
après ungit clone --depth 1 --no-local . shallow
Avec Git 2.27 (Q2 2020), le code pour s'interfacer avec GnuPG a été refactorisé.
Voir commit 6794898 , commit f1e3df3 (04 mars 2020) par Hans Jerry Illikainen (
illikainen
) .(Fusionné par Junio C Hamano -
gitster
- dans commit fa82be9 , 27 mars 2020)la source
Une inspection superficielle du code suggère qu'il n'existe pas de méthode directe de ce type.
Tous les tests de la source git reposent sur le
grep
ping de la sortie degit show
(voir t / t7510-signed-commit.sh pour les tests).Vous pouvez personnaliser la sortie en utilisant quelque chose comme
--pretty "%H %G?%"
pour le rendre facile à analyser.Il semble que vous puissiez demander
git merge
à vérifier une signature mais là encore, ses tests reposent surgrep
(voir t / t7612-merge-verify-signatures.sh ). Il semble qu'une signature invalide provoquera lagit merge
sortie avec une mauvaise signature, donc vous pourriez potentiellement aujourd'hui pirater cela en faisant un test de fusion quelque part et en rejetant cette fusion, mais cela semble pire que d'appeler simplement grep.la source