Почему 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"

Другие вопросы по тегам