问题 如何在Windows上使用像IntelliJ这样的IDE签署git提交?
如果您感兴趣,请阅读我尝试过的内容:
我主要遵循了Github的指南。我确保在更改配置文件后不要忘记重新启动bash / IntelliJ。
- 生成一个新的GPG密钥对
- 将GPG密钥添加到我的GitHub账户中
- 将已在GitHub验证的电子邮件与我的GPG密钥关联起来,确保我的
.gitconfig
文件中的电子邮件与之相同。 - 告诉Git我的GPG密钥
- {{link5:用GPG签署提交},并确认在Github上已验证。
- 从同一页开始,我使用
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: Sorry, no terminal at all requested - can't get input所说,解决方案是删除no-tty
,但我希望这不适用于我的情况。第一个问题中的其他答案建议在
gpg.conf
文件中添加use-agent
,这会导致额外的错误gpg: gpg-agent is not available in this session
。等等,也许我需要设置gpg-agent。我能找到的最好的Windows指南是Archlinux wiki(没错)。它指定将生存时间添加到
C:/Users/username/.gnupg/gpg-agent.conf
文件中,因此我创建了该文件并添加了default-cache-ttl 34560000
和max-cache-ttl 34560000
,如https://superuser.com/questions/624343/keep-gnupg-credentials-cached-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
新得多,因此我想要gpg2,以便可以运行git config --global gpg.program gpg2
。但是,我在命令行上没有可用的gpg2。我安装了Gpg4win(二进制发行版,在底部),甚至单独安装了Gnupg 2,但这没有为我提供命令行中的gpg2。我注意到我的Program Files(x86)文件夹中有GNU文件夹,我认为我应该有的。我使用
where gpg
发现它至少没有指向我刚下载的gpg,因为那个显示在第二个位置。因此,我使用git config --global gpg.program 'C:\Program Files (x86)\GnuPG\bin\gpg.exe'
将git指向正确的位置。现在我有了错误
gpg: skipped "key
我现在可以在IntelliJ中提交,但不能再使用Git Bash提交,结果是“跳过”keyid“:没有秘密密钥”。更多想法:
20. 我无法使用“gpg --export [ID] | gpg2 --import && gpg --export-secret-keys [ID] | gpg2 --import”将密钥从gpg导出到gpg2。 21. 我想Gpg4win可能可以单独配置,这样我就不必每次输入密码。不幸的是,我找不到任何地方让Gpg4win记住我的口令。 22. 后来我想,如果我没记错,“gpg --list-secret-keys”从未为gpg 2返回任何内容。我后来才发现该命令与“gpg --list-keys”不同。 总之,主要问题是:gpg-agent允许口令缓存,但git的gpg版本与gpg-agent版本不匹配,因此您必须首先安装正确的gpg 2。但我没能以这样的方式安装它,使得我可以从Git Bash和IntelliJ都提交。
git config --global commit.gpgsign true
这就是我一直在寻找的! - user4399002