作者:手机用户2502903213 | 来源:互联网 | 2023-01-12 10:04
IDEA不是终端,目前无法处理签名.请参阅https://youtrack.jetbrains.com/issue/IDEA-127802.
有一个解决方法,请查看https://youtrack.jetbrains.com/issue/IDEA-127802#comment=27-1866498
1> PHPirate..:
从git 2.19.1开始,支持gpg2!
gpg-agent现在可以处理自动签名,记住你的密码
这应该可以更容易地使用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任何一个,试试gpg2
命令代替gpg
,所以gpg2 --version
.如果这样做,你将不得不使用gpg2
而不是gpg
从现在开始.
如果您看到一个git路径但它不是最顶层的路径,请将(在Windows上)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,然后再次检查.
接下来的几个步骤来自优秀的Github指南,最好是检查命令是否仍然正确.首先,生成一个新的GPG密钥对(但不要安装gnupg工具!):运行gpg --full-generate-key
,选择RSA和RSA以及4096位.
作为真实姓名使用你user.name
的~\.gitconfig
.
作为电子邮件,使用电子邮件从user.email
你的~\.gitconfig
,确保这封邮件是在GitHub上经过验证的电子邮件.
如果您想尝试gpg-agent(每次重启后必须至少提供一次密码),或者如果您在GitHub上使用"未经验证"的徽章,请提供密码.否则,请将其留空.
每次你想检查你有什么键,请使用gpg --list-secret-keys --keyid-format LONG
.现在就做,然后key_id
从输出中复制(因为我将从现在开始命名你的密钥)sec rsa4096/key_id 2018-10-27 [SC] ...
.
打印公钥gpg --armor --export key_id
.
将GPG密钥添加到您的GitHub帐户:转到Settings | SSH and GPG keys
并添加公钥块(包括页眉和页脚).
告诉Git关于你的GPG密钥: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使用它.
重启bash.
注册一个犯了GPG用git commit -S -m "signed commit"
,并确认这是在Github上验证,你应该看到一个小徽章,当你查看你的提交.
设置默认情况下要签名的提交git config --global commit.gpgsign true
.进行新的提交并验证是否已签名git verify-commit HEAD
.
使提交签名自动发生的步骤:三个选项
我的钥匙上没有密码
你完成了.
我想试试gpg-agent
对我来说这个选项不起作用:我仍然经常提供我的密码,但并非总是如此.但理论上这有效:
更新缓存时间,在C:\Users\username\.gnupg\gpg-agent.conf
:创建文件(如果不存在),添加default-cache-ttl 34560000
和max-cache-ttl 34560000
.
使用重新启动gpg-agent gpgconf --kill gpg-agent
现在你应该在提交时输入密码,然后再不输入密码.检查您的提交是否Verified
在GitHub上.
3.将明文密码短语发送到gpg
这意味着您永远不必提供密码,但对我而言,这意味着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 "$@"
提交并推送并检查您是否没有被要求输入密码,并且您的提交仍然Verified
在GitHub上.
没有gpg2的旧git版本的旧答案
作为参考,这里是完整的说明,或者更确切地说是我为使其有所工作所采取的步骤."工作"是指提交是自动签名的,但有两个缺点:
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未签署此提交的密钥
创建提交需要更长的时间,比如五秒而不是一秒.
如果您遇到问题,请检查问题中的步骤,看看我是否遇到了同样的问题.
前几步来自Github的好指南:生成一个新的GPG密钥对
将GPG密钥添加到您的GitHub帐户
将经过验证的(通过GitHub)电子邮件与您的GPG密钥相关联,并确保您的姓名和电子邮件.gitconfig
相同.
告诉Git你的GPG密钥
使用GPG签署提交并确认它是在Github上验证,当您查看提交时,您应该看到一个小徽章.
设置默认情况下要签名的提交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
.
2> 小智..:
IDEA不是终端,目前无法处理签名.请参阅https://youtrack.jetbrains.com/issue/IDEA-127802.
有一个解决方法,请查看https://youtrack.jetbrains.com/issue/IDEA-127802#comment=27-1866498