PHP*_*ate 19 git gnupg intellij-idea
问题如何在Windows上使用IntelliJ等IDE进行git提交?
如果你有兴趣,请阅读我在这里尝试的内容:
我主要跟随Github的指南.我确保在更改配置文件后不要忘记重启bash/IntelliJ.
.gitconfig
是相同的.git config --global commit.gpgsign true
(我正在使用git 2.12).我做了一个新的提交并验证它已签名git verify-commit HEAD
当我尝试在IntelliJ中提交时,我gpg: cannot open tty 'no tty'
发现IntelliT在尝试签名提交(GPG)并添加no-tty
到我的C:\Users\username\.gnupg\gpg.conf
文件并重新启动时未能提交更改.
然后我得到了gpg: Sorry, no terminal at all requested - can't get input
似乎合理的错误,因为我刚添加了与没有终端有关的选项.像gpg:抱歉,没有终端请求 - 无法获得输入说解决方案是删除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
并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,我注意到我必须在我的程序文件(x86)中使用GNU文件夹,我认为我应该有.随着where gpg
我发现它至少不是指着我刚刚下载的GPG,因为一个显示第二.所以我把git指向正确的git config --global gpg.program 'C:\Program Files (x86)\GnuPG\bin\gpg.exe'
现在我有错误gpg: skipped "keyid": secret key not available
.gpg中的解决方案:跳过"N":秘密密钥不可用是我刚刚做的,所以这没有帮助.然后我意识到我用其他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签署GIT提交与GPG相关,但唯一的答案是MAC,似乎不适用于Windows.它确实引导我:
me.m01.eu暗示添加名为新的环境变量GNUPGHOME
指向C:\Users\username\.gnupg
.该目录存在,但正如git提交回答中提到的那样失败:秘密密钥不可用我想我的新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
必须创建的文件中.因为这个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 --list-secret-keys
从来没有为gpg 2返回任何东西.我后来发现那个命令不同于gpg --list-keys
.简而言之,这是主要问题:gpg-agent允许密码短语缓存,但gpg版本的git与gpg-agent版本不匹配,所以你必须先自己安装正确的gpg 2.但我没有设法以我可以从Git Bash和IntelliJ提交的方式进行安装.
PHP*_*ate 21
这应该可以更容易地使用gpg自动签署提交.确切地说,git版本2.19.1至少有gpg 2.2.9.这些说明在Windows 7,Windows 8.1,Windows 10,Arch Linux和Fedora 29上进行了测试.
配置git commit签名的步骤
启动(在Linux上)一个终端或(在Windows上)git bash,检查git --version
那个git至少gpg --version
是2.19.1并且你正在使用gpg2.
如果没有,请检查where gpg
(或者which gpg
如果where
命令不可用)最顶层路径是git路径.
gpg2
命令代替gpg
,所以gpg2 --version
.如果这样做,你将不得不使用gpg2
而不是gpg
从现在开始.alias gpg="'C:\path\to\Git\usr\bin\gpg.exe'"
放入您C:\Users\username\.bash_profile
的文件中,如果该文件不存在则创建该文件,然后重新启动git bash.尝试where gpg
和gpg --version
试.从现在开始,在哪里gpg
输入文件,你应该替换它'C:\path\to\Git\usr\bin\gpg.exe'
.检查gpg --version
主目录是否类似(在Linux上)/home/username/.gnupg
或(在Windows上)的输出/c/Users/username/.gnupg
.此目录不一定存在.
如果路径不正确,请尝试更改它 - 例如在Windows上一次我看到我的主页以我运行命令的路径为前缀,因此我在.bash_profile
with中alias gpg="gpg --homedir=/c/Users/s156757/.gnupg"
重新设置了别名并重新启动了bash,然后再次检查.
gpg --full-generate-key
,选择RSA和RSA以及4096位.user.name
的~\.gitconfig
.user.email
你的~\.gitconfig
,确保这封邮件是在GitHub上经过验证的电子邮件.gpg --list-secret-keys --keyid-format LONG
.现在就做,然后key_id
从输出中复制(因为我将从现在开始命名你的密钥)sec rsa4096/key_id 2018-10-27 [SC] ...
.gpg --armor --export key_id
.Settings | SSH and GPG keys
并添加公钥块(包括页眉和页脚).git config --global user.signingkey key_id
.--homedir
选项,则需要确保当git启动gpg时,主页也会正确更改.创建一个文件C:\Users\username\start-gpg.sh
并放入其中gpg --homedir=/c/Users/s156757/.gnupg "$@"
.然后运行git config --global gpg.program C:\\Users\\username\\start-gpg.sh
告诉git使用它.git commit -S -m "signed commit"
,并确认这是在Github上验证,你应该看到一个小徽章,当你查看你的提交.git config --global commit.gpgsign true
.进行新的提交并验证是否已签名git verify-commit HEAD
.你完成了.
对我来说这个选项不起作用:我仍然经常提供我的密码,但并非总是如此.但理论上这有效:
C:\Users\username\.gnupg\gpg-agent.conf
:创建文件(如果不存在),添加default-cache-ttl 34560000
和max-cache-ttl 34560000
.gpgconf --kill gpg-agent
Verified
在GitHub上.这意味着您永远不必提供密码,但对我而言,这意味着GitHub会Unverified
在我的提交中放置徽章.问题:key-id在签名中的密钥没有签署此提交
C:\Users\username\start-gpg.sh
下面的代码替换所有内容.如果没有,请使用以下内容创建文件,删除--homedir
标志并运行git config --global gpg.program C:\\Users\\username\\start-gpg.sh
.无论如何,重启bash.是的,您将在计算机上以明文形式输入密码!如果您有更好的方法,请发表评论......
# Passphrase-file-descriptor is set to 0 (STDIN), to use it --batch must be used
# The --pinentry-mode loopback is required since gpg 2.1.0 for --passphrase-fd
# The "$@" makes sure that whatever git wanted gpg to do, is still done
echo mypassphrase | gpg --homedir=/c/Users/username/.gnupg --passphrase-fd 0 --batch --yes --pinentry-mode loopback "$@"
Run Code Online (Sandbox Code Playgroud)
Verified
在GitHub上.作为参考,这里是完整的说明,或者更确切地说是我为使其有所工作所采取的步骤."工作"是指提交是自动签名的,但有两个缺点:
unverified
:
The key whose key-id is in the signature did not sign this commit. Someone may be trying to trick you.
关于此的后续问题是其签名中的key-id未签署此提交的密钥如果您遇到问题,请检查问题中的步骤,看看我是否遇到了同样的问题.
.gitconfig
相同.设置默认情况下要签名的提交git config --global commit.gpgsign true
.进行新的提交并验证是否已签名git verify-commit HEAD
.
git附带的gpg版本太旧了,所以安装Gpg4win(二进制版本,在底部)应该安装gpg 2. where gpg
你应该看到两个路径,其中可能第二个是你的新gpg,类似于C:\Program Files (x86)\GnuPG\bin\gpg.exe
.如果没有,请尝试从下载页面单独安装Gnupg 2.
我把alias gpg="'C:\Program Files (x86)\GnuPG\bin\gpg.exe'"
给点gpg
命令到我的新GPG在我C:\Users\username\.bash_profile
,重新启动的Git Bash和与检查gpg --version
,现在我使用GPG 2.
添加一个GNUPGHOME
指向的新环境变量C:\Users\username\.gnupg
.重新启动并检查printenv GNUPGHOME
您是否正确添加了它.
制作一个脚本C:\Users\username\gpg-no-tty.sh
并放入其中echo passphrase | "C:\Program Files (x86)\GnuPG\bin\gpg.exe" --passphrase-fd 0 --batch --no-tty --yes "$@"
你在这里用明文写密码的原因是因为这个--batch
选项使得它全部工作,需要密码短语.对我来说,似乎应该存在比在计算机上以明文保存密码短的更好的解决方案,所以如果你找到更好的东西请发表评论.
用这个脚本指向git git config --global gpg.program C:\\Users\\username\\gpg-no-tty.sh
.
现在在Git Bash和IntelliJ中测试你可以提交,并验证它是否正常工作git verify-commit HEAD
.
Mah*_*zad 12
从 IntelliJ 版本2021.2开始,您可以将 IDE 配置为自动为您签署提交。
请参阅 IntelliJ文档或视频教程了解如何执行此操作。
请参阅GitHub 文档,了解如何将 GPG 密钥添加到您的 GitHub 帐户。
Dmi*_*nov 11
IDEA不是终端,目前无法处理签名.请参阅https://youtrack.jetbrains.com/issue/IDEA-127802.
有一个解决方法,请查看https://youtrack.jetbrains.com/issue/IDEA-127802#comment=27-1866498
归档时间: |
|
查看次数: |
6441 次 |
最近记录: |