現在、私は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ではなくコマンドラインからのパスフレーズ入力のみを受け入れます。
元のエラーを修正し、署名コミットでピンエントリをポップアップさせるにはどうすればよいですか?
正しいgitconfigオプションを設定することで修正できました。
まず、gpg --list-signatures
を実行して正しい署名を取得し、sig
またはsig 3
のいずれかでマークされている署名IDを探します
sig 3 54ABFD17372D7B88 ...
次に、git configuser.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
を使用してコミットすると、ピン入力ボックスが表示されます。
これをVSCode、GitHub Desktop、IDEAベースの製品(PyCharm、Android Studio、PHPStormなど)などのほとんどのGUIプログラムで機能させるには、commit.gpgsign
をtrueに設定する必要があります:
git config --global commit.gpgsign true
これはすべてのコミットに署名します。特定のコミットに署名したくない場合は、コミットするときに--no-gpg-sign
を使用します。