質問Windows上のIntelliJのようなIDEを使用してgitコミットに署名するにはどうすればよいですか?
興味があるなら、私がここで試したことを読んでください:
主に Githubのガイド に従いました。構成ファイルを変更した後、bash/IntelliJを再起動することを忘れないでください。
.gitconfig
のメールが同じであることを確認しました。git config --global commit.gpgsign true
で署名されるようにコミットを設定します(git 2.12を使用しています)。新しいコミットを作成し、git verify-commit HEAD
で署名されていることを確認しましたIntelliJでコミットしようとするとgpg: cannot open tty 'no tty'
が返されるので、 IntelliJがコミット(GPG) に署名しようとしたときに変更のコミットに失敗し、no-tty
を追加しましたC:\Users\username\.gnupg\gpg.conf
ファイルを再起動しました。
それからエラーgpg: Sorry, no terminal at all requested - can't get input
が表示されますが、これは端末なしで実行するオプションを追加しただけなので合理的です。 gpgのように:申し訳ありませんが、端末はまったく要求されません-入力を取得できません は、解決策はno-tty
を削除することであると言います。
最初の質問の他の回答では、use-agent
もgpg.conf
ファイルに追加することを提案しました。これにより、追加のエラーgpg: gpg-agent is not available in this session
が発生します。ああ、多分私はgpg-agentをセットアップする必要があります。
私が見つけたWindows向けの最高のガイドは、 Archlinux wiki (そうです)です。 C:/Users/username/.gnupg/gpg-agent.conf
に生存時間を追加することを指定しているので、そのファイルを作成し、 https://superuser.com/questionsに従ってdefault-cache-ttl 34560000
およびmax-cache-ttl 34560000
を追加します。/624343/keep-gnupg-credentials-cached-for-for-entire-user-session
さて、実際にこのgpg-agent https://superuser.com/questions/1153101/why-does-git-complain-that-no-gpg-agent-is-running 確かにgpg-agent --version
がgpg --version
よりもずっと新しいことを確認したので、git config --global gpg.program gpg2
を実行できるようにgpg2が欲しいです。
しかし、コマンドラインでgpg2を使用できません。 Gpg4win (バイナリリリース、下部)とGnupg 2を個別にインストールしましたが、コマンドラインでgpg2が表示されず、GNU私が持っているべきだと思うプログラムファイル(x86)内。 where gpg
で、少なくともダウンロードしたばかりのgpgを指していないことがわかりました。そこで、git config --global gpg.program 'C:\Program Files (x86)\GnuPG\bin\gpg.exe'
でgitを正しいものに向けました。
エラーgpg: skipped "keyid": secret key not available
が発生しました。 gpg:の解決策は「N」をスキップしました:秘密鍵は利用できません は私がやったことなので、助けにはなりません。それから、私はすべてを他のgpgでセットアップしましたが、これではありませんでした。 alias gpg="'C:\Program Files (x86)\GnuPG\bin\gpg.exe'"
を実行し、gpg --version
をチェックして、すべてを再度実行しました。実際、.bash_profile
にエイリアス行を挿入しているので、毎回実行する必要はありません。
gpg --gen-key
を試すとすぐにハングします。理由はわかりませんが、古いgpgは正常に機能したため、問題が十分なエントロピーではないと思いますが、新しいバージョンではより多くのエントロピーが必要になる可能性があります。いずれにせよ、インターネット上で同じ問題を抱えているWindowsユーザーを見つけることができませんでした。
できます! IntelliJでコミットすると、pinentryでパスフレーズを1回だけ要求します。しかし、Git Bashからコミットすることはできません。no secret key
エラーが発生したため、gpg --list-keys
は空です。このgpgに関連付けられているキーはありません。
Intellij IDEA GPG でGITコミットに署名することは重要ですが、唯一の答えはMACに対するものであり、Windowsには適用されないようです。それは私を導きました:
me.m01.eu は、C:\Users\username\.gnupg
を指すGNUPGHOME
という新しい環境変数を追加することを示唆しています。そのディレクトリは存在しますが、 git commit signing failedの回答で述べたように、秘密鍵が使用できません 私の新しいgpgはC:\Users\username\AppData\Roaming\gnupg
を使用しているので、代わりに追加しました。 printenv GNUPGHOME
で確認して、正しく追加したことを確認しました(再起動する必要がありました)。しかし、何も変更しませんでした。
私のキーはC:\Users\username\.gnupg
であると思うので、環境変数をそこに向けようとしましたが、助けにはなりませんでした。gpg --list-keys
はまだ空でした。そのため、キーがどこにあるかをgpgに指摘する別の方法を見つける必要がありました。
gpg --list-keys --homedir='C:/Users/s156757/.gnupg'
は正しいキーを提供したので、homedir C:\Users\s156757\.gnupg
を作成する必要があるC:\Users\username\AppData\Roaming\gnupg\gpg.conf
ファイルに追加することにしました。 このバグ のため。 gpg --list-keys
がキーを返したことを確認しました。 no-tty
とuse-agent
をこのconfファイルに追加しても同じエラーが解決しませんでした。
IntelliJ内からコミットできるようになりましたが、Git Bashを使用してコミットできなくなり、
skipped "keyid": No secret key
になります。
その他の考え
gpg --export [ID] | gpg2 --import && gpg --export-secret-keys [ID] | gpg2 --import
を使用してキーをgpgからgpg2にエクスポートすることができませんでしたgpg --list-secret-keys
がgpg 2に対して何も返さなかったことを正しく覚えていれば、後で考えました。そのコマンドはgpg --list-keys
とは異なることが後でわかりました。要するにこれが主な問題です。gpg-agentはパスフレーズのキャッシュを許可しますが、gitのgpgバージョンはgpg-agentバージョンと一致しないため、最初に適切なgpg 2をインストールする必要があります。しかし、Git BashとIntelliJの両方からコミットできるような方法で、そのインストールを実行することはできませんでした。
IDEAは端末ではないため、現時点では署名を処理できません。 https://youtrack.jetbrains.com/issue/IDEA-127802 を参照してください。
回避策はありますが、 https://youtrack.jetbrains.com/issue/IDEA-127802#comment=27-1866498 を確認してください