web-dev-qa-db-ja.com

gitでコミットに署名するときにgpg-agent / pinentryが利用できないのはなぜですか?

現在、私はgit 2.15.0.windows.1、gpg 2.2.1、およびgpg-agent2.2.1を実行しているWindowsを使用しています。 pinentry/gpg-agentを介してgitでコミットに署名しようとしていますが、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

私はまだgitなしでgpgを介して署名することができます:

私のgpg.conf:

keyserver hkp://keys.gnupg.net
no-tty
use-agent

最後の2行を削除しても、gpgは引き続きpinentryをポップアップし、gitはコミットに再度署名できますが、pinentryではなくコマンドラインからのパスフレーズ入力のみを受け入れます。

元のエラーを修正し、署名コミットでピンエントリをポップアップさせるにはどうすればよいですか?

4
Judge2020

正しいgitconfigオプションを設定することで修正できました。

まず、gpg --list-signaturesを実行して正しい署名を取得し、sigまたはsig 3のいずれかでマークされている署名IDを探します

sig 3        54ABFD17372D7B88  ...

次に、git configuser.signingkeyをそれに設定します。

git config --global user.signingkey 54ABFD17372D7B88

そして最後に、gpg.programgpg.exeバイナリの場所に設定します。

git config --global gpg.program "C:\Program Files (x86)\GnuPG\bin\gpg.exe"

これで、-Sまたは--gpg-signを使用してコミットすると、ピン入力ボックスが表示されます。


これをVSCode、GitHub Desktop、IDEAベースの製品(PyCharm、Android Studio、PHPStormなど)などのほとんどのGUIプログラムで機能させるには、commit.gpgsignをtrueに設定する必要があります:

git config --global commit.gpgsign true

これはすべてのコミットに署名します。特定のコミットに署名したくない場合は、コミットするときに--no-gpg-signを使用します。

0
Judge2020