在 git 提交(gpg)中,git命令总是要求输入密码gpg-代理在跑。
我发射gpg-代理和
$ eval `gpg-agent -s --enable-ssh-support --daemon --write-env-file $HOME/.gpg-agent-info`
然后我打开另一个终端并检查它是否正在运行:
$ cat ~/.gpg-agent-info
GPG_AGENT_INFO=/tmp/gpg-w2HH4r/S.gpg-agent:28539:1
SSH_AUTH_SOCK=/tmp/gpg-QQTJCD/S.gpg-agent.ssh
SSH_AGENT_PID=28539
$ ps -u $USER | grep gpg-agent
28539 ? 00:00:00 gpg-agent
$ echo $GPG_AGENT_INFO $SSH_AUTH_SOCK $SSH_AGENT_PID
/tmp/gpg-w2HH4r/S.gpg-agent:28539:1 /tmp/gpg-QQTJCD/S.gpg-agent.ssh 28539
$ echo test | gpg-aes -t D2FA51BD --use-agent | gpg --use-agent
....
test
....
首先 '....' 表示需要密码,并且gpg-代理发射pinentry-gtk-2。 最后 '....' 说GPG正在使用密钥 ID 进行签名。
再次运行相同的命令不会要求输入密码
。
但是当运行 git 时,GPG在命令行中要求输入密码,没有带 pinentry 的 gpg-agent:
$ echo test >> test.txt ; git add test.txt ; git commit -S -m "test"
....
(intro passphrase)
....
再次运行(一次又一次......)相同的命令总是要求输入密码(相同的密钥 ID)。
我的.gitconfig只设置了用户名和电子邮件. 两个命令(GPG和git) 要求输入相同的密钥 ID。调用GPG和--使用代理工作正常(没有它不行),但是git没有可传递的选项GPG(仅限用户配置值.gitconfig);并且环境正确。
日志记录gpg-代理和调试级别 8仅显示活动GPG命令,但没有git。
我在用着gnupg 1.4.12和gpg-agent 2.0.19(Debian Wheezy 稳定版,官方仓库)。我从 github 仓库克隆了 git,在本地编译并安装了当前版本 (2.3.0.rc1.30.g76afe74),结果相同。
我检查了我的配置,但不知道这是个什么问题。有什么建议吗?
谢谢
答案1
我真傻...设置选项使用代理在gpg配置文件解决了这个问题。
Git不检查是否gpg-代理正在运行,并且GPG需要使用选项调用--使用代理。
我必须更改我的默认 GPG 行为(选项)...并使用--不使用代理在其他场景中。