#git-signed-commits-why
Зачем подписывать коммиты GPG или SSH? Что даёт verified-значок?
Что отвечать
Provenance: подпись доказывает что коммит создал владелец ключа, а не кто-то с твоим именем в `user.name`/`user.email` (эти поля Git вообще не проверяет). Без подписи легко закоммитить от чужого имени: `git -c user.name='Linus Torvalds' -c user.email='torvalds@...' commit`. GPG/SSH-подпись + публикация ключа в GitHub дают значок Verified в UI и проверку через `git verify-commit`. Защищает от impersonation и supply-chain атак.
Что хотят услышать
Senior должен: - назвать конкретный риск без подписи: коммит «как кто-то другой» тривиально, нужны только две строки в `git -c` - различить GPG (старый стандарт, нужен gpg-agent) и SSH-signing (с Git 2.34+, проще: тот же ssh-ключ что для push) - показать настройку: `git config user.signingkey <key>` + `git config commit.gpgsign true` + `git config gpg.format ssh` для SSH-варианта - назвать что GitHub помечает Verified только когда коммит подписан **и** ключ опубликован в профиле автора - упомянуть `git verify-commit <sha>` и `git log --show-signature` для локальной проверки - сказать что в высоко-чувствительных репо нужно требовать signed-commits через branch protection
Подводные камни
- ✗ Думать что `user.name`/`user.email` это аутентификация - это просто текст в коммите, никто не проверяет
- ✗ Положить приватный GPG ключ без passphrase для удобства - утечка ключа = подделка всех коммитов
- ✗ Включить signed-commits в branch protection и забыть про CI-бота, который коммитит без ключа - заблокирует автоматику
Follow-up
- ? Как настроить SSH-signing вместо GPG?
- ? Что произойдёт если коммит подписан, но ключ не в профиле GitHub?
- ? Как требовать signed-commits в branch protection не сломав CI?
Глубина в базе знаний