При подписывании коммитов с Git мой пароль не запрашивается

Я пытался подписать мои коммиты с командой git commit -S но он не работает без запроса моей парольной фразы для моего ключа GPG.

Ошибка:

error: gpg failed to sign the data
fatal: failed to write commit object

Я заметил, что если я выполню следующую команду перед git commit -S:

gpg -o /dev/null --local-user MY_KEY_ID -as <(echo 1234) && echo "The correct passphrase was entered for this key"

... все работает хорошо, и мои коммиты должным образом подписаны. Я думаю, что это потому, что моя фраза кэшируется, но это не то поведение, которое я ожидаю.

Я надеялся, что Git будет запрашивать мою фразу-пароль каждый раз, когда я хочу подписать коммиты или теги.

Была найдена команда "разблокировать мой ключ" по этому вопросу: как использовать командную строку gpg для проверки правильности ключевой фразы

2 ответа

Решение

Вы, вероятно, должны сказать pinentry, программное обеспечение, используемое gpg, чтобы запросить ваш пароль, где вас попросить.

export GPG_TTY=$(tty)
git commit -S

Если это работает, я бы порекомендовал экспортировать GPG_TTY в файле rc вашей оболочки.

Документация gpg-agent относительноGPG_TTY

Для меня сброс и повторная установка ключа подписи сработали как шарм.

Это работает, если вы меняете ключ подписи на другой или git внезапно перестал запрашивать парольную фразу.

      // remove signing key
git config --unset user.signingkey

// add new signing key
git config user.signingkey SECRETKEYLONGID

// tell git to automatically sign every commit
git config commit.gpgsign true

// commit as usual
git commit -m "commit message"

Git объясняет , как получить длинный идентификатор ключа подписи.

Вот и все!. Я надеюсь, что это пригодится.

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