Mit neueren Versionen von git
es möglich, einzelne Commits (zusätzlich zu Tags) mit einem PGP-Schlüssel zu signieren:
git commit -m "some message" -S
Und Sie können diese Signaturen in der Ausgabe von git log
mit der --show-signature
Option anzeigen:
$ 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
Aber gibt es eine andere Möglichkeit, die Signatur eines bestimmten Commits programmgesteuert zu überprüfen, als die Ausgabe von zu überprüfen git log
? Ich suche nach dem Commit-Äquivalent von git tag -v
- etwas, das einen Exit-Code bereitstellt, der angibt, ob für ein bestimmtes Commit eine gültige Signatur vorhanden war oder nicht.
git commit ...
und seingit log ...
. Soweit ich weiß, wurdengpg
keine Unterbefehle hinzugefügt, diegit
transparent übergeben werden ... Ich habe keine Repos zum Testen, aber funktioniert dasgit show --show-signature <commitish>
?show_signature
fügt der Ausgabe nur Dinge hinzu (siehe github.com/git/git/blob/master/log-tree.c#L370 ).--raw
fürgit verify-tag
/ habengit verify-commit
. Siehe meine Antwort untengit log
wird zusätzliche StatuscodesE
,X
,Y
,R
fürERRSIG
,EXPSIG
,EXPKEYSIG
, undREVKEYSIG
, dass so ein Benutzer%G?
mehr Informationen bekommen. Siehe meine bearbeitete Antwort untengpg.minTrustLevel
bei der Verwendung vongit verify-tag
/ helfenverify -commit
. Siehe meine bearbeitete Antwort unten .Antworten:
Nur für den Fall, dass jemand über eine Suchmaschine auf diese Seite kommt, wie ich es getan habe: In den zwei Jahren seit der Veröffentlichung der Frage wurden neue Tools zur Verfügung gestellt: Es gibt jetzt Git-Befehle für diese Aufgabe:
git verify-commit
undgit verify-tag
können zum Überprüfen von Commits und verwendet werden Tags.quelle
Hinweis: Bis Git 2.5
git verify-commit
undgit verify-tag
nur eine vom Menschen lesbare Nachricht angezeigt.Wenn Sie die Prüfung automatisieren möchten, fügt git 2.6+ (Q3 2015) eine weitere Ausgabe hinzu.
Siehe Commit e18443e , Commit aeff29d , Commit ca194d5 , Commit 434060e , Commit 8e98e5f , Commit a4cc18f , Commit d66aeff (21. Juni 2015) von brian m. Carlson (
bk2204
) .(Zusammengeführt von Junio C Hamano -
gitster
- in commit ba12cb2 , 03. August 2015)Plus:
git 2.9 (Juni 2016) aktualisiert das git merge doc :
Siehe Commit 05a5869 (13. Mai 2016) von Keller Fuchs (``) .
Mit freundlicher
gitster
Unterstützung von Junio C Hamano ( ) .(Zusammengeführt von Junio C Hamano -
gitster
- in Commit be6ec17 , 17. Mai 2016)Update Git 2.10 (Q3 2016)
Siehe Commit b624a3e (16. August 2016) von Linus Torvalds (
torvalds
) .(Zusammengeführt von Junio C Hamano -
gitster
- in Commit 83d9eb0 , 19. August 2016)Git 2.11+ (Q4 2016) wird noch präziser.
Siehe Commit 661a180 (12. Oktober 2016) von Michael J Gruber (
mjg
) .(Zusammengeführt von Junio C Hamano -
gitster
- in Commit 56d268b , 26. Oktober 2016)Die
git pretty-format
Dokumentation enthält jetzt:Git 2.12 (Q1 2017) "
git tag
" und "git verify-tag
" haben gelernt, den GPG-Überprüfungsstatus in ihr "--format=<placeholders>
" Ausgabeformat zu setzen .Siehe Commit 4fea72f , Commit 02c5433 , Commit ff3c8c8 (17. Januar 2017) von Santiago Torres (
SantiagoTorres
) .Siehe Commit 07d347c , Commit 2111aa7 , Commit 94240b9 (17. Januar 2017) von Lukas Puehringer (``) .
(Zusammengeführt von Junio C Hamano -
gitster
- in Commit 237bdd9 , 31. Januar 2017)Mit Git 2.16 (Q1 2018) kann die Überprüfung der Commit-Signatur mit der
merge.verifySignatures
Konfigurationsvariablen noch automatisiert werden.Siehe Commit 7f8ca20 , Commit ca779e8 (10. Dezember 2017) von Hans Jerry Illikainen (``) .
(Zusammengeführt von Junio C Hamano -
gitster
- in Commit 0433d53 , 28. Dezember 2017)Die
git merge
Konfigurations-Manpage lautet nun:Git 2.19 (Q3 2018) ist noch hilfreicher, da "
git verify-tag
" und "git verify-commit
" gelernt haben, den Exit-Status des zugrunde liegenden "gpg --verify
" zu verwenden, um eine schlechte oder nicht vertrauenswürdige Signatur zu signalisieren, die sie gefunden haben.Hinweis: Mit Git 2.19
gpg.format
kann dies auf "openpgp
" oder "x509
" gesetzt werden undgpg.<format>.program
wird verwendet, um anzugeben, welches Programm für den Umgang mit dem Format verwendet werden soll), damit x.509-Zertifikate mit CMS über "gpgsm
" anstelle von "verwendetopenpgp
werden können "gnupg
".Siehe Commit 4e5dc9c (09. August 2018) von Junio C Hamano (
gitster
) .Unterstützt von: Vojtech Myslivec (
VojtechMyslivec
) , brian m. Carlson (bk2204
) und Jeff King (peff
) .(Zusammengeführt von Junio C Hamano -
gitster
- in Commit 4d34122 , 20. August 2018)Auf der Vertrauensseite gibt es Fortschritte:
Mit Git 2.26 (Q1 2020) wurde eine
gpg.minTrustLevel
Konfigurationsvariable eingeführt, um verschiedenen Codepfaden zur Signaturüberprüfung die erforderliche Mindestvertrauensstufe mitzuteilen.Siehe Commit 54887b4 (27. Dezember 2019) von Hans Jerry Illikainen (
illikainen
) .(Zusammengeführt von Junio C Hamano -
gitster
- in Commit 11ad30b , 30. Januar 2020)Die
git config gpg
Manpage enthält jetzt:Mit Git 2.26 (Q1 2020)
git show
gaben " " und andere in ihrer Fehlerausgabe einen Objektnamen im Rohformat an, der korrigiert wurde, um ihn in hexadezimaler Form anzugeben.Getestet mit
git -C shallow log --graph --show-signature -n1 plain-shallow
nach agit clone --depth 1 --no-local . shallow
Mit Git 2.27 (Q2 2020) wurde der Code für die Schnittstelle mit GnuPG überarbeitet.
Siehe Commit 6794898 , Commit f1e3df3 (04. März 2020) von Hans Jerry Illikainen (
illikainen
) .(Zusammengeführt von Junio C Hamano -
gitster
- in Commit fa82be9 , 27. März 2020)quelle
Eine flüchtige Überprüfung des Codes legt nahe, dass es keine solche direkte Methode gibt.
Alle Tests in der Git-Quelle basieren auf dem
grep
Ping der Ausgabe vongit show
(siehe t / t7510-signed-commit.sh für die Tests).Sie können die Ausgabe anpassen, indem
--pretty "%H %G?%"
Sie das Parsen vereinfachen.Es scheint, dass Sie
git merge
nach einer Signatur fragen können, aber auch hier stützen sich die Tests daraufgrep
(siehe t / t7612-merge-verify-signatures.sh ). Es sieht so aus, als würde eine ungültige Signatur dazu führengit merge
, dass sie mit einer schlechten Signatur beendet wird. Sie könnten dies also möglicherweise heute umgehen, indem Sie irgendwo eine Testzusammenführung durchführen und diese Zusammenführung verwerfen, aber das scheint schlimmer zu sein, als nur grep aufzurufen.quelle