2017-10-21 145 views
3

问题我如何注册混帐提交使用类似的IntelliJ Windows上的IDE?如何在IntelliJ IDE等IDE中签名提交?

如果你有兴趣,读什么我想在这里:

我跟着主要Github's guide。我确保在更改配置文件后不要忘记重新启动bash/IntelliJ。

  1. Generate a new GPG key pair
  2. Add the GPG key to my GitHub account
  3. Associate a verified (by GitHub) email with my GPG key,我在我的.gitconfig确信电子邮件是一样的。
  4. Tell Git about my GPG key
  5. Sign a commit with GPG并确认它是Github上的Verfied。
  6. 从同一页面,我设置提交以默认签名git config --global commit.gpgsign true(我使用git 2.12)。我做了一个新的提交并验证它与git verify-commit HEAD
  7. 当我尝试的IntelliJ提交签字,我得到gpg: cannot open tty 'no tty'所以我发现IntelliJ fails to commit changes when attempting to sign commit (GPG)并添加no-ttyC:\Users\username\.gnupg\gpg.conf文件并重新启动。

  8. 然后我得到错误gpg: Sorry, no terminal at all requested - can't get input这似乎是合理的,因为我只是添加了与终端有关的选项。像gpg: Sorry, no terminal at all requested - can't get input说解决方案是删除no-tty,我希望不适用于我的情况。

  9. 在第一个问题,其他的答案建议增加use-agent以及在gpg.conf文件,这会导致更多的错误gpg: gpg-agent is not available in this session。等等,也许我需要设置gpg-agent。

  10. 适用于Windows,我能找到的最好的指南是Archlinux wiki(是的,右)。它指定要添加到C:/Users/username/.gnupg/gpg-agent.conf住的时候,所以我创建这个文件,并添加default-cache-ttl 34560000https://superuser.com/questions/624343/keep-gnupg-credentials-cached-for-entire-user-session

  11. max-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

  12. 但我没有在命令行上提供gpg2。我安装Gpg4win(二进制版本,在底部),甚至GNUPG 2分开,但没有给我gpg2在命令行中,我注意到我在我的程序文件(x86),我想我应该有文件夹GNU。用where gpg我发现它至少没有指向我刚下载的gpg,因为那个显示第二个。所以我指出正确的一个与git config --global gpg.program 'C:\Program Files (x86)\GnuPG\bin\gpg.exe'

  13. 现在我有错误gpg: skipped "keyid": secret key not availablegpg: skipped "N": secret key not available中的解决方案就是我刚才所做的,所以这没有帮助。然后我意识到我把所有的东西都放在另一个gpg上,而不是这个。我做了alias gpg="'C:\Program Files (x86)\GnuPG\bin\gpg.exe'",检查了gpg --version并且再次做了整件事。其实我把别名行放在我的.bash_profile中,所以我不需要每次都运行它。

  14. 当我尝试gpg --gen-key立即挂起。不知道为什么,我不认为这个问题是不够的,因为旧的gpg运行良好,但是新版本可能需要更多的熵。无论如何,我找不到在互联网上遇到同样问题的任何Windows用户。

  15. 它的工作原理!当我在IntelliJ中提交时,它只需要松一次就请求我的密码。但现在我不能从Git Bash提交,因为no secret key错误是有道理的,因为正如我所说的gpg --list-keys是空的:没有密钥与此gpg关联。

  16. Intellij IDEA signing GIT commits with GPG是相关的,但唯一的答案是MAC和似乎并不适用于Windows。它确实引导我:

  17. 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检查,我正确添加它(我不得不重新启动)。虽然没有改变任何东西。

  18. 由于我的钥匙是我认为在C:\Users\username\.gnupg我试图指出环境变量到那里,但它没有帮助,gpg --list-keys仍然是空的。所以我不得不寻找另一种方式指出我的钥匙在哪里。

  19. gpg --list-keys --homedir='C:/Users/s156757/.gnupg'便从正确的钥匙,所以我决定将homedir C:\Users\s156757\.gnupgC:\Users\username\AppData\Roaming\gnupg\gpg.conf文件,我不得不创建。由于this bug。我确认gpg --list-keys退还了我的钥匙。仍然是相同的错误,加入no-ttyuse-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提交。

    回答

    2

    IDEA不是终端,并不能在此刻手柄签约。请参阅https://youtrack.jetbrains.com/issue/IDEA-127802

    有一种变通方法,虽然,检查https://youtrack.jetbrains.com/issue/IDEA-127802#comment=27-1866498

    +0

    啊我不知道'--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

    1

    对于参考,这里是我做使它工作的完整说明,或者说的步骤。如果您遇到问题,请检查问题中的步骤,看看是否有同样的问题。

    1. 前几个步骤是从良Github's guideGenerate a new GPG key pair
    2. Add the GPG key to your GitHub account
    3. Associate a verified (by GitHub) email with your GPG key,并确保在您的.gitconfig的姓名和电子邮件是相同的。
    4. Tell Git about your GPG key
    5. Sign a commit with GPG并确认它是在Github上验证,你应该看到一个小徽章,当你查看你的提交。
    6. 设置提交将被默认签名为git config --global commit.gpgsign true。做一个新的提交,并验证它是否与git verify-commit HEAD签署。

    7. 自带的git的GPG版本太旧,所以安装[Gpg4win] [8](二进制版本,在底部)应安装GPG 2. where gpg你应该看到两个路径,其中可能的其次是你的新gpg,例如C:\Program Files (x86)\GnuPG\bin\gpg.exe。如果不是,请尝试从下载页面单独安装Gnupg 2。

    8. 我把alias gpg="'C:\Program Files (x86)\GnuPG\bin\gpg.exe'"gpg命令指向我的新GPG在我C:\Users\username\.bash_profile,重新启动的Git Bash和与gpg --version检查,我现在用GPG 2.

    9. 添加名为GNUPGHOME一个新的环境变量,指向C:\Users\username\.gnupg。重新启动并与printenv GNUPGHOME确认您已正确添加它。

    10. 制作一个脚本C:\Users\username\gpg-no-tty.sh并把它付诸表决echo passphrase | gpg --passphrase-fd 0 --batch --no-tty --yes "[email protected]"

      你把你的密码以明文这里的原因是因为--batch选项,这使得它所有的工作,需要喂密码。对我来说,似乎应该存在一个比计算机上的明文保存密码更好的解决方案,所以如果你发现更好的东西,请留下评论。

    11. 指向这个脚本的git与git config --global gpg.program C:\\Users\\username\\gpg-no-tty.sh

    12. 现在在Git Bash和IntelliJ中测试您可以提交的内容,并通过执行git verify-commit HEAD来验证它的工作情况。