В более новых версиях git
можно подписывать отдельные коммиты (в дополнение к тегам) с помощью ключа PGP:
git commit -m "some message" -S
И вы можете показать эти подписи в выводе git log
с помощью --show-signature
опции:
$ 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 <lars@seas.harvard.edu>"
Author: Lars Kellogg-Stedman <lars@seas.harvard.edu>
Date: Fri Jun 28 14:28:41 2013 -0400
this is a test
Но есть ли способ программно проверить подпись для данного коммита, кроме как путем grepping вывода git log
? Я ищу эквивалент фиксации git tag -v
- что-то, что предоставит код выхода, указывающий, была ли действительная подпись для данной фиксации.
git commit ...
иgit log ...
. Насколько я знаю,gpg
не добавлены подкоманды, которые передаютсяgit
прозрачно ... У меня нет репозиториев для тестирования, ноgit show --show-signature <commitish>
работает ли?show_signature
только добавляет элементы в вывод (см. github.com/git/git/blob/master/log-tree.c#L370 ).--raw
дляgit verify-tag
/git verify-commit
. Смотрите мой ответ нижеgit log
вводит дополнительные коды состоянияE
,X
,Y
,R
дляERRSIG
,EXPSIG
,EXPKEYSIG
, иREVKEYSIG
, таким образом , что пользователь%G?
получает больше информации. См. Мой отредактированный ответ нижеgpg.minTrustLevel
может помочь при использованииgit verify-tag
/verify -commit
. См. Мой отредактированный ответ ниже .Ответы:
На всякий случай, если кто-то зайдет на эту страницу через поисковую систему, как это сделал я: Новые инструменты стали доступны за два года, прошедшие с момента публикации вопроса: Теперь есть команды git для этой задачи:
git verify-commit
иgit verify-tag
их можно использовать для проверки коммитов и теги соответственно.источник
Примечание: до git 2.5
git verify-commit
иgit verify-tag
отображало только удобочитаемое сообщение.Если вы хотите автоматизировать проверку, git 2.6+ (Q3 2015) добавляет еще один результат.
См. Commit e18443e , commit aeff29d , commit ca194d5 , commit 434060e , commit 8e98e5f , commit a4cc18f , commit d66aeff (21 Jun 2015) by brian m. Карлсон (
bk2204
) .(Объединено Junio C Hamano -
gitster
- в фиксации ba12cb2 , 3 августа 2015 г.)Плюс:
git 2.9 (июнь 2016 г.) обновите документ git merge :
См. Коммит 05a5869 (13 мая 2016 г.) Келлера Фукса (``) .
Помощник: Junio C Hamano (
gitster
) .(Объединено Junio C Hamano -
gitster
- в фиксации be6ec17 , 17 мая 2016 г.)Обновление Git 2.10 (3 квартал 2016 г.)
См. Коммит b624a3e (16 августа 2016 г.) Линуса Торвальдса (
torvalds
) .(Объединено Junio C Hamano -
gitster
- в фиксации 83d9eb0 , 19 августа 2016 г.)Git 2.11+ (4 квартал 2016 г.) будет еще точнее.
См. Commit 661a180 (12 октября 2016 г.) Майкла Дж. Грубера (
mjg
) .(Объединено Junio C Hamano -
gitster
- в коммите 56d268b , 26 октября 2016 г.)git pretty-format
Документация теперь включает в себя:Git 2.12 (Q1 2017) "
git tag
" и "git verify-tag
" научились помещать статус проверки GPG в свой "--format=<placeholders>
" выходной формат .См. Commit 4fea72f , commit 02c5433 , commit ff3c8c8 (17 января 2017 г.) Сантьяго Торрес (
SantiagoTorres
) .См. Коммит 07d347c , коммит 2111aa7 , коммит 94240b9 (17 января 2017 г.) Лукаса Пюрингера (``) .
(Объединено Junio C Hamano -
gitster
- в коммите 237bdd9 , 31 января 2017 г.)Git 2.16 (первый квартал 2018 г.) позволит еще больше автоматизировать проверку подписи фиксации с
merge.verifySignatures
помощью переменной конфигурации.См. Commit 7f8ca20 , commit ca779e8 (10 декабря 2017 г.) Ханс Джерри Илликайнен (``) .
(Объединено Junio C Hamano -
gitster
- в коммите 0433d53 , 28 декабря 2017 г.)На
git merge
странице руководства по конфигурации теперь говорится:Git 2.19 (Q3 2018) еще более полезен, так как "
git verify-tag
" и "git verify-commit
" были обучены использовать статус выхода базового "gpg --verify
", чтобы сигнализировать о плохой или ненадежной подписи, которую они нашли.Примечание: с Git 2.19,
gpg.format
который может быть установлен в "openpgp
" или "x509
", иgpg.<format>.program
это используется для указания, какую программу использовать для работы с форматом), чтобы разрешить использование сертификатов x.509 с CMS через "gpgsm
" вместоopenpgp
использования "gnupg
".См. Commit 4e5dc9c (09 августа 2018 г.), автор Junio C Hamano (
gitster
) .Помощники: Войтех Мысливец (
VojtechMyslivec
) , brian m. Карлсон (bk2204
) и Джефф Кинг (peff
) .(Объединено Junio C Hamano -
gitster
- в фиксации 4d34122 , 20 августа 2018 г.)На стороне доверия есть прогресс: в
Git 2.26 (Q1 2020)
gpg.minTrustLevel
была введена конфигурационная переменная, которая сообщает различным кодовым путям проверки подписи требуемый минимальный уровень доверия.См. Коммит 54887b4 (27 декабря 2019 г.) Ханса Джерри Илликайнена (
illikainen
) .(Объединено Junio C Hamano -
gitster
- в коммите 11ad30b , 30 января 2020 г.)git config gpg
Страница человека теперь включает в себя:В Git 2.26 (Q1 2020) "
git show
" и другие давали имя объекта в необработанном формате в выводе ошибок, который был исправлен, чтобы дать его в шестнадцатеричном формате.Протестировано
git -C shallow log --graph --show-signature -n1 plain-shallow
послеgit clone --depth 1 --no-local . shallow
В Git 2.27 (второй квартал 2020 г.) код для взаимодействия с GnuPG был переработан.
См. Commit 6794898 , commit f1e3df3 (4 марта 2020 г.) Ханс Джерри Илликайнен (
illikainen
) .(Объединено Junio C Hamano -
gitster
- в фиксации fa82be9 , 27 марта 2020 г.)источник
Беглый просмотр кода подсказывает, что такого прямого метода не существует.
Все тесты в исходном коде git полагаются на
grep
ping выводgit show
(см. Тесты t / t7510-signed-commit.sh ).Вы можете настроить вывод, используя что-то вроде
--pretty "%H %G?%"
упрощения синтаксического анализа.Похоже, вы можете попросить
git merge
проверить подпись, но опять же, его тесты полагаются наgrep
(см. T / t7612-merge-verify-signatures.sh ). Похоже, что недействительная подпись приведетgit merge
к выходу с плохой подписью, поэтому вы потенциально можете сегодня обойти это, выполнив где-нибудь тестовое слияние и выбрасывая это слияние, но это кажется хуже, чем просто вызов grep.источник