Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 为什么我必须杀死gpg代理才能签署我的承诺?_Git_Gnupg - Fatal编程技术网

Git 为什么我必须杀死gpg代理才能签署我的承诺?

Git 为什么我必须杀死gpg代理才能签署我的承诺?,git,gnupg,Git,Gnupg,,所以我借此机会实现了GPG并开始使用密钥。当我想开始提交时,我会得到以下信息: $ git commit You need a passphrase to unlock the secret key for user: "John Doe <johndoe@email.com>" 4096-bit RSA key, ID ABCD1234, created 2016-04-08 gpg: problem with the agent - disabling agent use

,所以我借此机会实现了GPG并开始使用密钥。当我想开始提交时,我会得到以下信息:

$ git commit

You need a passphrase to unlock the secret key for
user: "John Doe <johndoe@email.com>"
4096-bit RSA key, ID ABCD1234, created 2016-04-08

gpg: problem with the agent - disabling agent use
error: gpg failed to sign the data
fatal: failed to write commit object
$git提交
您需要密码短语来解锁的密钥
用户:“约翰·多伊”
4096位RSA密钥,ID ABCD1234,创建于2016-04-08
gpg:代理问题-禁用代理使用
错误:gpg无法对数据进行签名
致命:无法写入提交对象
我上网搜索了一个解决方案,一个网站(针对邮件提供商)建议
killall-gpg-agent
,结果成功了。现在,我可以通过输入我的密码来签署提交


是否需要gpg代理
?当我安装GPG时,它似乎是随GPG而来的,但是如果我必须杀死它来签署我的承诺,那么我似乎有一些我不理解的东西。如何修复此问题,以便运行
gpg代理
,并能够签署我的提交?

我今天才知道如何在Mac上使用
gpg代理
。我在遇到与您相同的错误后被阻止:

gpg: problem with the agent - disabling agent use
太长,读不下去了我是怎么修好的 对于我的设置,我可以通过安装
pinentry mac
并指向
gpg agent
使用它来解决这个问题,从而根据需要弹出一个GUI提示

1. install pinentry-mac
% brew install pinentry-mac
2. update gpg-agent conf
# manually change ~/.gnupg/gpg-agent.conf's pinentry-program to /usr/local/bin/pinentry-mac
3. update shell's view of PATH contents
% hash -r
4. restart gpg-agent
# however you normally do it (see below for how I run it manually)
有关调试的详细信息 我通过手动重新启动
gpg代理
对此进行了调试。我首先注释掉了
~/.gnupg/gpg agent.conf
中的配置,然后运行此命令以使用
--verbose
重新启动gpg代理:

% killall gpg-agent && \
  eval $(gpg-agent --pinentry-program /usr/local/bin/pinentry --default-cache-ttl 60 --daemon --verbose)
然后我运行了一个测试命令,看到了上面列出的错误以及一个新错误:

# update the MY_GPG_KEY_ID as appropriate
% echo hi | gpg -e -r $(MY_GPG_KEY_ID) | gpg -d --use-agent
...
gpg-agent[60604]: command get_passphrase failed: Device not configured
gpg: problem with the agent - disabling agent use
...
我最终意识到(在阅读和之后)启动
GPG代理时所遵循的步骤并没有设置
GPG\u TTY
。因此,一旦我设置了该变量,一切都“起作用”:

在这个练习中,我尝试了许多不同的选项,发现
pinentrymac
GUI提示器“刚刚工作”

避免GUI密码短语提示器 如果您不希望出现GUI提示器,那么我认为确保在每个终端中设置以下环境变量就足够了:

  • GPG\u TTY
    • e、 例如,您可以将这一行放入您的.bashrc中:
    • export GPG\u TTY=$(TTY)
  • GPG\u代理信息

我忘了提到我使用Ubuntu:汗水笑:让我看看我是否能把你的研究成果应用到我的问题上。解决我问题的方法显然更简单。根据,我必须向GPG指定我正在使用的TTY,一旦完成,一切都很好。如果您修改您的答案来反映这一点,我可以接受您的答案。@cj duncan我将有关设置
GPT\TTY
的详细信息放在您的
中。bashrc
(我不知道如何使用您用户名中的空格“@”您:)在我的Mac电脑上对我来说效果很好,我正准备多次输入密码来发布。谢谢@funkybro:很高兴它帮助了你!
% killall gpg-agent && \
  eval $(gpg-agent --pinentry-program /usr/local/bin/pinentry --default-cache-ttl 60 --daemon --verbose)
% export GPG_TTY=`tty`
# Now the below command succeeds
% echo hi | gpg -e -r $(MY_GPG_KEY_ID) | gpg -d --use-agent