Dengan versi yang lebih baru git
, dimungkinkan untuk menandatangani komit individu (selain tag) dengan kunci PGP:
git commit -m "some message" -S
Dan Anda dapat menunjukkan tanda tangan ini di output git log
dengan --show-signature
opsi:
$ 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
Tetapi apakah ada cara untuk memverifikasi tanda tangan secara terprogram pada komit yang diberikan selain dengan meng-grep output dari git log
? Saya mencari padanan komit dari git tag -v
- sesuatu yang akan memberikan kode keluar yang menunjukkan apakah ada tanda tangan yang valid pada komit yang diberikan.
git commit ...
dangit log ...
. Sejauh yang saya tahu,gpg
belum menambahkan sub-perintah yang diteruskan ke secaragit
transparan ... Saya tidak memiliki repo untuk diuji, tetapi apakahgit show --show-signature <commitish>
berfungsi?show_signature
hanya menambahkan sesuatu ke keluaran (lihat github.com/git/git/blob/master/log-tree.c#L370 ).--raw
untukgit verify-tag
/git verify-commit
. Lihat jawaban saya di bawah inigit log
kode status memperkenalkan tambahanE
,X
,Y
,R
untukERRSIG
,EXPSIG
,EXPKEYSIG
, danREVKEYSIG
, sehingga pengguna dari%G?
mendapatkan informasi lebih lanjut. Lihat jawaban saya yang telah diedit di bawahgpg.minTrustLevel
dapat membantu saat menggunakangit verify-tag
/verify -commit
. Lihat jawaban saya yang sudah diedit di bawah .Jawaban:
Seandainya seseorang datang ke halaman ini melalui mesin pencari, seperti yang saya lakukan: Alat baru telah tersedia dalam dua tahun sejak pertanyaan diposting: Sekarang ada perintah git untuk tugas ini:
git verify-commit
dangit verify-tag
dapat digunakan untuk memverifikasi komit dan tag, masing-masing.sumber
Catatan: hingga git 2.5,
git verify-commit
dangit verify-tag
hanya menampilkan pesan yang dapat dibaca manusia.Jika Anda ingin mengotomatiskan pemeriksaan, git 2.6+ (Q3 2015) menambahkan keluaran lain.
Lihat commit e18443e , commit aeff29d , commit ca194d5 , commit 434060e , commit 8e98e5f , commit a4cc18f , commit d66aeff (21 Jun 2015) oleh brian m. carlson (
bk2204
) .(Digabung oleh Junio C Hamano -
gitster
- di commit ba12cb2 , 03 Agustus 2015)Plus:
git 2.9 (Juni 2016) perbarui dokumen git merge :
Lihat commit 05a5869 (13 Mei 2016) oleh Keller Fuchs (``) .
Dibantu oleh: Junio C Hamano (
gitster
) .(Digabung oleh Junio C Hamano -
gitster
- di commit be6ec17 , 17 Mei 2016)Perbarui Git 2.10 (Q3 2016)
Lihat commit b624a3e (16 Agustus 2016) oleh Linus Torvalds (
torvalds
) .(Digabung oleh Junio C Hamano -
gitster
- di commit 83d9eb0 , 19 Agustus 2016)Git 2.11+ (Q4 2016) bahkan akan lebih presisi.
Lihat commit 661a180 (12 Okt 2016) oleh Michael J Gruber (
mjg
) .(Digabung oleh Junio C Hamano -
gitster
- di commit 56d268b , 26 Okt 2016)The
git pretty-format
Dokumentasi sekarang termasuk:Git 2.12 (K1 2017) "
git tag
" dan "git verify-tag
" belajar menempatkan status verifikasi GPG dalam--format=<placeholders>
format keluaran " " .Lihat commit 4fea72f , commit 02c5433 , commit ff3c8c8 (17 Jan 2017) oleh Santiago Torres (
SantiagoTorres
) .Lihat commit 07d347c , commit 2111aa7 , commit 94240b9 (17 Jan 2017) oleh Lukas Puehringer (``) .
(Digabung oleh Junio C Hamano -
gitster
- di commit 237bdd9 , 31 Jan 2017)Git 2.16 (Q1 2018) akan memungkinkan verifikasi tanda tangan komit menjadi lebih otomatis, dengan
merge.verifySignatures
variabel konfigurasi.Lihat commit 7f8ca20 , commit ca779e8 (10 Des 2017) oleh Hans Jerry Illikainen (``) .
(Digabung oleh Junio C Hamano -
gitster
- di commit 0433d53 , 28 Des 2017)The
git merge
halaman manual config sekarang berbunyi:Git 2.19 (K3 2018) bahkan lebih berguna, karena "
git verify-tag
" dan "git verify-commit
" telah diajarkan untuk menggunakan status keluar dari "gpg --verify
" yang mendasari untuk menandakan tanda tangan yang buruk atau tidak tepercaya yang mereka temukan.Catatan: dengan Git 2.19,
gpg.format
itu dapat disetel ke "openpgp
" atau "x509
", dangpg.<format>.program
itu digunakan untuk menentukan program apa yang akan digunakan untuk menangani format) untuk mengizinkan x.509 sertifikat dengan CMS melalui "gpgsm
" untuk digunakan alih-alihopenpgp
melalui "gnupg
".Lihat commit 4e5dc9c (09 Agustus 2018) oleh Junio C Hamano (
gitster
) .Dibantu oleh: Vojtech Myslivec (
VojtechMyslivec
) , brian m. carlson (bk2204
) , dan Jeff King (peff
) .(Digabung oleh Junio C Hamano -
gitster
- di commit 4d34122 , 20 Agustus 2018)Di sisi kepercayaan, ada kemajuan:
Dengan Git 2.26 (Q1 2020),
gpg.minTrustLevel
variabel konfigurasi telah diperkenalkan untuk memberi tahu berbagai jalur kode verifikasi tanda tangan tingkat kepercayaan minimum yang diperlukan.Lihat commit 54887b4 (27 Des 2019) oleh Hans Jerry Illikainen (
illikainen
) .(Digabung oleh Junio C Hamano -
gitster
- di commit 11ad30b , 30 Jan 2020)The
git config gpg
halaman manual sekarang termasuk:Dengan Git 2.26 (K1 2020) , "
git show
" dan lainnya memberikan nama objek dalam format mentah dalam keluaran kesalahannya, yang telah dikoreksi menjadi hex.Diuji dengan
git -C shallow log --graph --show-signature -n1 plain-shallow
setelah agit clone --depth 1 --no-local . shallow
Dengan Git 2.27 (Q2 2020), kode untuk berinteraksi dengan GnuPG telah difaktor ulang.
Lihat commit 6794898 , commit f1e3df3 (04 Mar 2020) oleh Hans Jerry Illikainen (
illikainen
) .(Digabung oleh Junio C Hamano -
gitster
- di commit fa82be9 , 27 Mar 2020)sumber
Pemeriksaan sepintas terhadap kode menunjukkan bahwa tidak ada metode langsung seperti itu.
Semua pengujian di sumber git bergantung pada
grep
ping keluarangit show
(lihat t / t7510-signed-commit.sh untuk pengujian).Anda dapat menyesuaikan keluaran menggunakan sesuatu seperti
--pretty "%H %G?%"
untuk membuatnya mudah untuk diurai.Tampaknya Anda dapat meminta
git merge
untuk memverifikasi tanda tangan tetapi sekali lagi, pengujiannya bergantung padagrep
(lihat t / t7612-merge-verify-signatures.sh ). Tampaknya tanda tangan yang tidak valid akan menyebabkangit merge
keluar dengan tanda tangan yang buruk, jadi Anda berpotensi hari ini meretas hal ini dengan melakukan uji coba penggabungan di suatu tempat dan membuang penggabungan itu tetapi tampaknya lebih buruk daripada hanya memanggil grep.sumber