【发布时间】:2017-10-21 13:54:15
【问题描述】:
问题如何在 Windows 上使用 IntelliJ 等 IDE 签署 git 提交?
如果您有兴趣,请阅读我在这里尝试过的内容:
我主要关注Github's guide。更改配置文件后,我确保不要忘记重新启动 bash/IntelliJ。
- Generate a new GPG key pair
- Add the GPG key to my GitHub account
-
Associate a verified (by GitHub) email with my GPG key 我确保
.gitconfig中的电子邮件是相同的。 - Tell Git about my GPG key
- Sign a commit with GPG 并确认已在 Github 上验证。
- 在同一页面上,我将提交设置为默认使用
git config --global commit.gpgsign true签名(我使用的是 git 2.12)。我做了一个新的提交并验证它是用git verify-commit HEAD签名的
1234563
然后我收到错误
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 34560000https://superuser.com/questions/624343/keep-gnupg-credentials-cached-for-entire-user-session
1234563 /p>
但我在命令行上没有可用的 gpg2。我分别安装了Gpg4win(二进制版本,在底部)甚至Gnupg 2,但这并没有在命令行上给我gpg2,我注意到我必须在我的程序文件(x86)中将GNU文件夹,我认为我应该有。使用
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: skipped "N": secret key not available 中的解决方案是我刚刚所做的,所以没有帮助。然后我意识到我用另一个 gpg 设置了所有东西,而不是这个。我做了alias gpg="'C:\Program Files (x86)\GnuPG\bin\gpg.exe'",检查了gpg --version,然后又做了整件事。实际上我把别名行放在我的.bash_profile中,所以我不需要每次都运行它。当我尝试
gpg --gen-key时,它会立即挂起。不知道为什么,我认为问题不是熵不够,因为旧的 gpg 运行良好,但新版本可能需要更多的熵。无论如何,我在 Internet 上找不到任何有相同问题的 Windows 用户。有效!当我在 IntelliJ 中提交时,它只要求我输入一次带有 pinentry 的密码。但是现在我无法从 Git Bash 提交,
no secret key错误是有道理的,因为正如我所说,gpg --list-keys是空的:没有与此 gpg 关联的密钥。Intellij IDEA signing GIT commits with GPG 是相关的,但唯一的答案是 MAC 并且似乎不适用于 Windows。它确实引导我:
me.m01.eu 提示添加一个名为
GNUPGHOME的新环境变量,它指向C:\Users\username\.gnupg。该目录存在,但正如git commit signing failed: secret key not available 的回答中所述,我认为我的新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文件中。因为this bug。我确认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 - 我认为单独的 Gpg4win 可能可以配置,因此我不需要每次都输入密码。不幸的是,我找不到任何方法让 Gpg4win 记住我的密码。
- 我后来想,如果我没记错的话,
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这就是我要找的全部内容!
标签: git intellij-idea gnupg