问题我如何注册混帐提交使用类似的IntelliJ Windows上的IDE?如何在IntelliJ IDE等IDE中签名提交?
如果你有兴趣,读什么我想在这里:
我跟着主要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上的Verfied。
- 从同一页面,我设置提交以默认签名
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.conf
文件,这会导致更多的错误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
每 https://superuser.com/questions/624343/keep-gnupg-credentials-cached-for-entire-user-sessionmax-cache-ttl 34560000
如现在让我们真正开始这个GPG代理,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在命令行中,我注意到我在我的程序文件(x86),我想我应该有文件夹GNU。用
where gpg
我发现它至少没有指向我刚下载的gpg,因为那个显示第二个。所以我指出正确的一个与git config --global gpg.program 'C:\Program Files (x86)\GnuPG\bin\gpg.exe'
现在我有错误
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运行良好,但是新版本可能需要更多的熵。无论如何,我找不到在互联网上遇到同样问题的任何Windows用户。它的工作原理!当我在IntelliJ中提交时,它只需要松一次就请求我的密码。但现在我不能从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 --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猛砸,导致
skipped "keyid": No secret key
。
更多的想法
- 我没从GPG导出密钥与
gpg --export [ID] | gpg2 --import && gpg --export-secret-keys [ID] | gpg2 --import
- 我想Gpg4win到gpg2单独也许可以这样配置我每次都不需要输入我的密码。不幸的是,我找不到任何方法让Gpg4win记住我的密码。
- 后来我想,如果我没有记错的GPG 2.正确
gpg --list-secret-keys
再也没回什么,我后来才发现,这个命令是从gpg --list-keys
不同。
总之这是主要问题:gpg-agent允许密码缓存,但gpg版本的git与gpg-agent版本不匹配,所以你必须先安装正确的gpg 2。但是我没有设法以这种方式来做这样的安装,我可以从Git Bash和IntelliJ提交。
啊我不知道'--batch'选项,非常感谢!正如在https://unix.stackexchange.com/questions/60213/gpg-asks-for-password-even-with-passphrase/60439中提到的,我必须将我的密码输入到它才能使用。所以我的shell脚本成为'echo passphrase | gpg --passphrase-fd 0 --batch --no-tty --yes“$ @”'并在我的gitconfig中'C:\\ Users \\ s156757 \\ gpg-no-tty.sh'。我将在稍后为将来的用户写一个完整的答案。 – PHPirate