问:如何在Windows上使用类似于IDE的Intellij对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
当我尝试在intellij中提交时,我得到了gpg: cannot open tty 'no tty'
,因此我找到了IntelliJ fails to commit changes when attempting to sign commit (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
文件中添加use-agent
,这会导致额外的错误。啊,等等,也许我需要设置GPG代理。
我能找到的最好的Windows指南是Archlinux wiki(是的,对)。它指定将生存时间添加到gpg.conf
https://superuser.com/questions/624343/keep-gnupg-credentials-cached-for-entire-user-session
现在让我们实际启动这个gpg代理,https://superuser.com/questions/1153101/why-does-git-complain-that-no-gpg-agent-is-running让我检查确实gpg: gpg-agent is not available in this session
比C:/Users/username/.gnupg/gpg-agent.conf
更新很多,所以我希望有gpg2,这样我就可以运行default-cache-ttl 34560000
。
但是在命令行上没有可用的gpg2。我单独安装了(二进制版本,在底部)甚至是gnupg 2,但在命令行上没有给出gpg2,我注意到我必须将gnu文件夹在我的程序文件(x86)中,我认为我应该这样做。我发现它至少没有指向我刚下载的GPG,因为它显示的是秒。所以我用max-cache-ttl 34560000
现在我有了错误。Gpg4win中的解决方案就是我刚刚做的,所以这没有帮助。然后我意识到我用另一个GPG设置了一切,而不是用这个。我做了gpg-agent --version
,检查了gpg --version
,然后又做了整个事情。实际上,我把别名行放在我的git config --global gpg.program gpg2
中,这样就不需要每次都运行它。
当我尝试where gpg
时,它会立即挂起。不知道为什么,我不认为这个问题是不够的熵,因为旧的GPG工作得很好,但新的版本可能需要更多的熵。无论如何,我在Internet上找不到任何有相同问题的Windows用户。
它起作用了!当我在intellij中提交时,它只请求我的带有pinentry的密码短语一次。但是现在我不能从Git-Bash提交,因为有一个很有意义的git config --global gpg.program 'C:\Program Files (x86)\GnuPG\bin\gpg.exe'
错误,因为正如我所说的gpg: skipped "keyid": secret key not available
是空的:没有任何键与这个gpg相关联。
gpg: skipped "N": secret key not available是相关的,但唯一的答案是Mac,似乎不适用于Windows。它确实引导我:
Intellij IDEA signing GIT commits with GPG提示添加一个名为alias gpg="'C:\Program Files (x86)\GnuPG\bin\gpg.exe'"
的新环境变量,该变量指向gpg --version
。该目录存在,但正如在me.m01.eu的答案中提到的,我认为我的新GPG使用了.bash_profile
所以我添加了它。我检查了gpg --gen-key
是否正确添加了它(我必须重新启动)。但是没有改变。
由于我的键是,我认为在no secret key
中,我尝试将环境变量指向那里,但它没有帮助,gpg --list-keys
仍然是空的。所以我必须找到另一种方法来向GPG指出我的钥匙在哪里。GNUPGHOME
给出了正确的键,因此我决定将C:\Users\username\.gnupg
添加到我必须创建的C:\Users\username\AppData\Roaming\gnupg
文件中。因为git commit signing failed: secret key not available。我确认已返回我的密钥。同样的错误,向这个conf文件添加printenv GNUPGHOME
和C:\Users\username\.gnupg
没有帮助。
我现在可以从intellij中提交,但现在不能再使用git bash了,这会导致gpg --list-keys
。
更多的想法
我没有成功地将密钥从gpg导出到gpg2
我以为GPG4win可以单独配置,所以我不需要每次都输入密码。不幸的是,我找不到让GPG4win记住我的密码的方法。
我后来想,如果我没记错的话,gpg --list-keys --homedir='C:/Users/s156757/.gnupg'
从来没有为GPG 2返回过任何东西。我后来才发现这个命令与homedir C:\Users\s156757\.gnupg
不同。
简而言之,这是主要的问题:gpg代理允许密码缓存,但是git的gpg版本与gpg代理版本不匹配,因此您必须首先自己安装正确的gpg 2。但我并没有以一种既可以从GitBash也可以从Intellij提交的方式完成安装。
最佳答案
IDEA不是终端,目前无法处理签名。请参见https://youtrack.jetbrains.com/issue/IDEA-127802。
但是有一个解决方法,请检查https://youtrack.jetbrains.com/issue/IDEA-127802#comment=27-1866498
关于git - 如何在像IntelliJ这样的IDE中签署git提交?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46863981/