Почему gpg-agent/pinentry недоступен при подписывании коммитов с помощью git?
В настоящее время я использую git 2.15.0.windows.1, gpg 2.2.1 и gpg-agent 2.2.1. Я пытаюсь подписать коммит с помощью git через pinentry/gpg-agent, однако при подписании коммита через git pinentry никогда не появляется и git выдает ошибку. Я все еще могу подписывать коммиты через gpg, но не через git.
> git commit -a -S -m "Signed Commit"
gpg: gpg-agent is not available in this session
gpg: Sorry, no terminal at all requested - can't get input
error: gpg failed to sign the data
fatal: failed to write commit object
Я все еще могу подписать через gpg без мерзавца:
Мой gpg.conf:
keyserver hkp://keys.gnupg.net
no-tty
use-agent
Когда я удаляю последние две строки, gpg по-прежнему выводит пинентри, и git может снова подписывать коммиты, однако он будет принимать только парольную фразу через командную строку вместо пинентри.
Как я могу исправить исходную ошибку и получить коментарии подписания всплывающего окна?
2 ответа
Я смог это исправить, установив правильные параметры git config.
Во-первых, получить правильную подпись, запустив gpg --list-signatures
и искать идентификатор подписи, который помечен либо sig
или же sig 3
sig 3 54ABFD17372D7B88 ...
Затем установите конфиг git user.signingkey
к нему:
git config --global user.signingkey 54ABFD17372D7B88
И наконец, установить gpg.program
к месту вашего gpg.exe
двоичный файл.
git config --global gpg.program "C:\Program Files (x86)\GnuPG\bin\gpg.exe"
Теперь, когда вы совершаете с -S
или же --gpg-sign
, вы должны увидеть коробку.
Если вы хотите, чтобы это работало с большинством программ с графическим интерфейсом, таких как VS Code, GitHub Desktop и продукты на основе IDEA (PyCharm, Android Studio, PHPStorm и т. Д.), Вам следует установить commit.gpgsign
к истине:
git config --global commit.gpgsign true
это будет подписывать каждый коммит. Если вы не хотите подписывать конкретный коммит, используйте --no-gpg-sign
при совершении.
В итоге у меня было установлено более одного клиента gpg. Думаю, я случайно установил его, когда недавно обновлял свой клиент git, поскольку в какой-то другой раз я устанавливал его отдельно. Мне пришлось назначитьgpg.program
чтобы он снова работал правильно.
git config --global gpg.program "C:\Path\To\My\Custom\gpg.exe"