551

我关注了几篇关于Git 2.10发行说明中漂亮属性的文章。通过将 git 升级到 2.10.0 并对全局结果进行更改如下 -.gitconfig

[filter "lfs"]
    clean = git-lfs clean %f
    smudge = git-lfs smudge %f
    required = true
[user]
    name = xyz
    email = abc.def@gmail.com
    signingkey = AAAAAAA
[core]
    excludesfile = /Users/xyz/.gitignore_global
    editor = 'subl' --wait
[difftool "sourcetree"]
    cmd = opendiff \"$LOCAL\" \"$REMOTE\"
    path = 
[mergetool "sourcetree"]
    cmd = /Applications/SourceTree.app/Contents/Resources/opendiff-w.sh \"$LOCAL\" \"$REMOTE\" -ancestor \"$BASE\" -merge \"$MERGED\"
    trustExitCode = true
[alias]
    lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative
[color "diff"]
    old = red strike
    new = green italic

但是现在我尝试使用

git commit -a -S -m "message"

我看到以下错误 -

您需要一个密码来解锁密钥

用户:“XYZ(数字签名)”

2048 位 RSA 密钥,ID AAAAAAA,创建于 2016-07-01

错误:gpg 未能签署数据致命:未能写入提交对象

注意- 我仍然可以使用git commit -a -m "message"

有没有办法克服同样的问题?或者在配置中需要进行任何更改gpg以配合 git 的升级?


更新 1

还寻求进一步的用处,遵循Is there a way to "autosign" commits in Git with a GPG key? . 我已经使用

git config --global user.signingkey ED5CDE14(with my key) 
git config --global commit.gpgsign true

并且很明显会得到同样的错误。

4

44 回答 44

753

我在 OSX 上遇到了这个问题。

原答案:

似乎 gpg update (of brew) 更改为 to 的位置gpggpg1您可以更改 git 查找 gpg 的二进制文件:

git config --global gpg.program gpg1

如果你没有 gpg1: brew install gpg1

更新的答案:

看起来 gpg1 已被弃用/ “轻轻地退出使用”,因此您可能实际上应该更新到 gpg2,不幸的是,这涉及更多步骤/一些时间:

brew upgrade gnupg  # This has a make step which takes a while
brew link --overwrite gnupg
brew install pinentry-mac

在旧自制软件上:

echo "pinentry-program /usr/local/bin/pinentry-mac" >> ~/.gnupg/gpg-agent.conf
killall gpg-agent

在 M1 macs 等更新的系统上:

echo "pinentry-program /opt/homebrew/bin/pinentry-mac" >> ~/.gnupg/gpg-agent.conf 
killall gpg-agent

第一部分安装 gpg2,后者是使用它所需的 hack。对于故障排除,请参阅这个答案(虽然这是关于 linux 而不是 brew),它建议一个很好的测试:

echo "test" | gpg --clearsign  # on linux it's gpg2 but brew stays as gpg

如果此测试成功(没有错误/输出包含 PGP 签名),则您已成功更新到最新的 gpg 版本。

您现在应该可以再次使用 git 签名了!
值得注意的是,您需要:

git config --global gpg.program gpg  # perhaps you had this already? On linux maybe gpg2
git config --global commit.gpgsign true  # if you want to sign every commit

注意:运行签名提交后,您可以验证它是否已签名:

git log --show-signature -1

这将包括最后一次提交的 gpg 信息。

于 2016-10-16T04:37:56.053 回答
558

如果使用 gnupg2 和 gpg-agent 2.x,请务必设置环境变量GPG_TTY

export GPG_TTY=$(tty)

有关常见问题,请参阅GPG 的文档。

于 2017-02-16T05:39:54.853 回答
358

如果一切都失败了,GIT_TRACE=1请尝试查看 git 实际在做什么:

$ GIT_TRACE=1 git commit -m "Add page that always requires a logged-in user"
20:52:58.902766 git.c:328               trace: built-in: git 'commit' '-vvv' '-m' 'Add page that always requires a logged-in user'
20:52:58.918467 run-command.c:626       trace: run_command: 'gpg' '--status-fd=2' '-bsau' '23810377252EF4C2'
error: gpg failed to sign the data
fatal: failed to write commit object

现在手动运行失败的命令:

$ gpg -bsau 23810377252EF4C2
gpg: skipped "23810377252EF4C2": Unusable secret key
gpg: signing failed: Unusable secret key

原来,我的钥匙过期了,git这不是罪魁祸首。

于 2017-11-29T20:30:23.640 回答
137

我已经通过这个简短简单的食谱做到了:

macOS上的自动签名提交(全局和使用不同的 IDE):

signingkey这种方式得到你的。

brew install gnupg gnupg2 pinentry-mac
git config --global user.signingkey <YOUR_SIGNING_KEY>
git config --global commit.gpgsign true
git config --global gpg.program gpg

将以下内容放入gpg.conf文件中(使用nano ~/.gnupg/gpg.conf命令编辑文件):

no-tty

将以下内容放入gpg-agent.conf文件中(使用nano ~/.gnupg/gpg-agent.conf命令编辑文件):

pinentry-program /usr/local/bin/pinentry-mac

更新

根据注释,您可能需要killall gpg-agent在编辑配置文件后执行命令。gpg.conf正如不言自明的命令所说,该命令将终止 GPG(Gnu Privacy Guard)代理。

于 2017-11-03T01:49:49.613 回答
131

按照以下 url 设置签名提交 https://help.github.com/en/articles/telling-git-about-your-signing-key

如果仍然得到 gpg 未能签署数据致命:未能写入提交对象

这不是 git 的问题,这是 GPG 遵循以下步骤

  1. gpg --version
  2. echo "test" | gpg --clearsign

如果显示:

gpg: signing failed: Inappropriate ioctl for device
gpg: [stdin]: clear-sign failed: Inappropriate ioctl for device

  1. 然后使用export GPG_TTY=$(tty)

  2. 然后再次尝试echo "test" | gpg --clearsign 获得 PGP 签名。

  3. git config -l | grep gpg

gpg.program=gpg
commit.gpgsign=true
  1. 申请git commit -S -m "commitMsz"
于 2019-05-05T14:35:51.450 回答
107

可能有助于杀死gpg-agent可能卡在旧数据上的进程。所以新gpg-agent开始会要求输入密码。

于 2017-06-01T09:32:43.610 回答
41

我的两分钱在这里:

当您创建并向 gpg-agent 添加密钥时,您定义了一个名为passphrase. 现在它passphrase在某个时候过期,gpg需要您再次输入它以解锁您的密钥,以便您可以再次开始签名。

当您使用与 接口的任何其他程序时,gpg不会出现gpg提示您输入密码的提示(基本上,当 daemonized 无法在 中向您显示输入对话框时)。gpg-agentstdin

然后,其中一种解决方案是gpg --sign a_file.txt输入您在创建密钥时输入的密码,然后一切都应该没问题(gpg-agent应该自动签名)

请参阅此答案,了解如何为您的密码设置更长的超时时间,这样您就不必一直这样做。

或者您可以完全删除密码短语ssh-keygen -p

编辑:man gpg-agent阅读一些有关如何自动发生上述情况并添加以下内容的内容

GPG_TTY=$(tty)
export GPG_TTY

如果您使用的是 bash(这是正确的答案,但我也在上面保持思路),那么在您的 .bashrc 上.bashrc获取您的文件或重新登录。

于 2018-08-10T08:56:22.277 回答
37

对于在MacOS机器上遇到此问题的任何人,请尝试以下操作:

  1. brew uninstall gpg
  2. brew install gpg2
  3. brew install pinentry-mac(如果需要的话)
  4. gpg --full-generate-key使用算法创建密钥。
  5. 通过执行获取生成的密钥:gpg --list-keys
  6. 在此处设置密钥git config --global user.signingkey <Key from your list>
  7. git config --global gpg.program /usr/local/bin/gpg
  8. git config --global commit.gpgsign true
  9. 如果您想将您的密钥导出到 GitHub,然后:gpg --armor --export <key> 并在 GPG 密钥处将此密钥添加到 GitHub:https ://github.com/settings/keys (包括 START 和 END 行)

如果问题仍然存在:

test -r ~/.bash_profile && echo 'export GPG_TTY=$(tty)' >> ~/.bash_profile

echo 'export GPG_TTY=$(tty)' >> ~/.profile

如果问题仍然存在:

安装https://gpgtools.org并通过按菜单栏中的Sign对您使用的密钥进行签名: Key -> Sign

如果问题仍然存在:

转到:您的全局.gitconfig文件,在我的情况下/Users/gent/.gitconfig ,修改.gitconfig文件(请确保电子邮件和名称与您在生成密钥时创建的相同)

[user]
	email = gent@youremail.com
	name = Gent
	signingkey = <YOURKEY>
[gpg]
	program = /usr/local/bin/gpg
[commit]
	gpsign = true
	gpgsign = true
[filter "lfs"]
	process = git-lfs filter-process
	required = true
	clean = git-lfs clean -- %f
	smudge = git-lfs smudge -- %f
[credential]
	helper = osxkeychain

于 2019-04-12T07:21:10.257 回答
31

我见过类似的答案,但与对我有用的完全不同。在 Linux 上,我不得不杀死并重新启动我gpg-agent的:

$ pkill gpg-agent
$ gpg-agent --daemon
$ git commit ...

这对我有用。看起来您确实需要user.signingkey设置您的私钥以及其他一些评论所说的内容。

$ git config --global user.signingkey [your_key_hash]
于 2019-08-16T20:09:49.447 回答
24

在 OS X 上,使用gnupg2via brew 我只需要杀死 gpg agent,有时会发生:

pkill -9 gpg-agent

env并根据需要设置变量:

export GPG_TTY=$(tty)

另请参阅常见的 GPG 问题此答案。

于 2019-10-17T07:08:38.160 回答
16

每次注销然后在我的 macOS 上再次登录时,我都会收到该错误。解决方案只是一个简单的命令:

killall gpg-agent

我认为这只是 gpg 代理的错误,杀死它然后再次工作。

于 2021-07-24T15:31:16.957 回答
16

git trace 对我的情况非常有启发性......

   GIT_TRACE=1 git commit -m "a commit message"
   13:45:39.940081 git.c:344               trace: built-in: git commit -m 'a commit message'
   13:45:39.977999 run-command.c:640       trace: run_command: gpg --status-fd=2 -bsau 'full name <your-email@domain.com>'
   error: gpg failed to sign the data
   fatal: failed to write commit object

我需要根据检查的格式生成一个初始密钥git。最好将传递给-bsau上面的值原样复制到日志中并在下面使用。

于是就变成了,

   gpg --quick-generate-key "full name <your-email@domain.com>"

然后它起作用了。

于 2018-10-03T17:58:57.667 回答
11

2016 年 10 月更新:问题 871确实提到“签名在 Git 2.9.3 中停止工作”

两天前(2016 年 10 月 4 日)发布的适用于 Windows 的 Git 2.10.1修复了提交和标记的交互式 GPG 签名。

git 中最近的 gpg-sign 更改(在 Linux 上没有引入任何问题)暴露了一个问题,即在 Windows 上,非 MSYS2-git 与 MSYS2-gpg 交互的方式存在问题。


原答案:

阅读“ 7.4 Git 工具 - 签署您的工作”,我假设您已经user.signingkey设置了“”配置。

围绕 gpg 的最后一次重大重构(在 Git 2.10 之前)是在提交 2f47eae2a中,此处错误消息已移至gpg-interface.c

该文件上的日志显示了提交 af2b21e (Git 2.10)中的最新更改

gpg2 默认已经使用长格式,但由于兼容性原因,大多数发行版似乎仍然将“gpg”作为较旧的 1.x 版本。而旧版本的 gpg 只显示 32 位短 ID,这是相当不安全的。

这实际上对验证本身并不重要:如果验证通过,则 pgp 签名是好的。
但是,如果您实际上还没有密钥,并且想要获取它,或者您想准确检查用于验证的密钥并想要检查它,我们应该更精确地指定密钥。

所以检查你如何指定你的user.signingkey配置,以及你正在使用的 gpg 版本(gpg1 或 gpg2),看看它们是否对错误消息有任何影响。

还有提交 0581b54更改gpg failed to sign the data错误消息的条件(作为提交 0d2b664的补充):

我们目前根本不从 stderr 读取。但是,我们希望在未来的补丁中,所以这也为我们做好了准备(在这种情况下,gpg确实在读取所有输入之前写入,但同样,key uid 不太可能填满管道缓冲区)。

提交 4322353显示 gpg 现在使用临时文件,因此可能存在正确的问题。

让我们转换为使用临时文件对象,它为我们处理困难的情况,并添加缺少的清理调用。

于 2016-09-19T07:57:23.113 回答
10

使用 cygwin,我最近切换到gpg2. 然后我在设置后用 git 签名时遇到了同样的问题git config gpg.program gpg2

尝试echo "test" | gpg2 --clearsign查看 gpg2 是否正常工作。我发现它是 set 最简单的解决方案git config gpg.program gpg,因为它有效。但是这样你也会得到一个更好的错误——例如你需要安装 pinentry。

于 2017-11-07T09:47:12.513 回答
8

可能是一个挂起的 gpg 代理。

尝试gpgconf --kill gpg-agent 这里讨论

于 2019-03-08T22:43:36.320 回答
7

如果您在没有 Rosetta 的 M1 芯片上使用自制软件,则需要指定 pinentry-program 二进制文件的不同位置,因为它安装在不同的位置。

安迪海登的更新答案应修改如下:

brew upgrade gnupg  # This has a make step which takes a while
arch -arm64 brew link --overwrite gnupg
arch -arm64 brew install pinentry-mac
echo "pinentry-program /opt/homebrew/bin/pinentry-mac" >> ~/.gnupg/gpg-agent.conf
killall gpg-agent
于 2021-04-29T06:18:05.733 回答
7

我在 Ubuntu 18.04 上收到此错误,结果证明我的密钥已过期

为了看到这一点,我运行了它并确认我的密钥已过期:

gpg --list-keys

为了纠正这个问题,我运行了(使用上一个命令中显示的 ID):

gpg --edit-key <ID>

从那里开始,我延长了这些说明的有效期key 0key 1遵循这些说明,这些说明归结为key 0然后输入expire并按照提示进行操作。然后重复key 1.

之后,为了测试这个,我跑了:

echo test | gpg --clearsign

在修复之前,它因错误而失败:

gpg:没有默认密钥:没有密钥
gpg:[stdin]:清除签名失败:没有密钥

但是在修复之后,相同的命令成功地签署了消息,所以我知道事情又恢复了!

于 2019-08-09T05:47:02.637 回答
5

我一定是不小心更新了 gpg,因为我在尝试测试 gpg 是否有效后得到了这个:

gpg: WARNING: server 'gpg-agent' is older than us (2.1.21 < 2.2.10)
gpg: Note: Outdated servers may lack important security fixes.
gpg: Note: Use the command "gpgconf --kill all" to restart them.

跑步gpgconf --kill all为我修好了。

于 2018-11-25T09:26:47.883 回答
5

我遇到了同样的问题。我很高兴地报告问题不在于,git 2.10.0而在于gnupg 1.4.21.

暂时将 gnupg 降级到 1.4.20 为我解决了这个问题。

如果您使用自制软件并且像我一样升级了软件包,您可能只需运行brew switch gnupg 1.4.20即可恢复。

于 2016-09-21T20:43:48.710 回答
4

确保您的电子邮件设置正确。

git config --global user.email "user@example.com"
于 2017-02-17T02:31:33.347 回答
4

这对我来说突然在 Ubuntu 上开始发生,不确定最近的更新是否做到了,但现有的问题都不适用于我(我已经GPG_TTY设置,尝试杀死代理等)。独立gpg命令因以下错误而失败:

$ echo "test" | gpg --clearsign
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512

test
gpg: signing failed: Operation cancelled
gpg: [stdin]: clear-sign failed: Operation cancelled

我尝试gpg使用--debug-all选项运行并注意到以下输出:

gpg: DBG: chan_3 <- INQUIRE PINENTRY_LAUNCHED 27472 gnome3 1.1.0 /dev/pts/6 screen-256color -
gpg: DBG: chan_3 -> END
gpg: DBG: chan_3 <- ERR 83886179 Operation cancelled <Pinentry>
gpg: signing failed: Operation cancelled

以上表明程序存在问题pinentry。Gpg 通常pinentry-curses为我运行,所以我将其更改为pinentry-tty(我必须先aptitude install这样做)并且错误消失了(尽管我不再获得全屏密码输入,但我还是不喜欢那样)。要进行此更改,我必须添加该行pinentry-program /usr/bin/pinentry-tty~/.gnupg/gpg-agent.conf杀死代理gpgconf --kill gpg-agent(它会在下次重新启动)。

于 2019-09-27T10:31:38.893 回答
3

经过大量搜索,我发现 gpg 密钥是我的问题。

要检查 gpg 密钥是否对您来说是个问题,请首先检查以下输出:

GIT_TRACE=1 git commit -m 'message'

如果出现问题,您将看到如下内容:

10:37:22.346480 run-command.c:637       trace: run_command: gpg --status-fd=2 -bsau <your GPG key>

它在这里以 GPG 密钥显示我的姓名和电子邮件,但这应该有密钥。你可以试试跑步gpg --status-fd=2 -bsau <your GPG key>

要更新正确的密钥,请执行以下操作:检查密钥使用:gpg --list-secret-keys --keyid-format=long

它应该具有以下输出:

/Users/hubot/.gnupg/secring.gpg
------------------------------------
sec   4096R/3AA5C34371567BD2 2016-03-10 [expires: 2017-03-10]
uid                          Hubot 
ssb   4096R/42B317FD4BA89E7A 2016-03-10

然后使用以下命令更新密钥:

git config --global user.signingkey 3AA5C34371567BD2

现在再次检查提交,如果关键是问题,它应该会成功。您需要设置密码来更新您可以使用 GitHub 文档执行的密钥。

更多细节在:https ://gist.github.com/paolocarrasco/18ca8fe6e63490ae1be23e84a7039374

于 2022-01-12T09:51:17.313 回答
3

除了没有使用 git 正确设置 gpg 密钥外,另一个可能的问题是:尝试从 ssh 会话内部使用 X 转发进行提交。在这种情况下,它可能会尝试调用一个 GUI,如果DISPLAY未设置 env var,则会失败。

您可以通过编辑以下命令强制 gpg-agent 使用 tty-only 工具~/.gnupg/gpg-agent.conf

pinentry-program /usr/bin/pinentry-tty

然后重新加载conf:

gpg-connect-agent reloadagent /bye

(当然要先安装 pinentry-tty)

于 2021-09-24T14:39:19.050 回答
3

如果与您的 GPG 密钥的 uid 相关联的电子邮件与您在 git 中使用的电子邮件不同,您需要将另一个用户 ID 添加到您的密钥或使用与电子邮件完全匹配的密钥。

您可以使用以下方法添加另一个 UID:

$ gpg --edit-key

请参阅https://superuser.com/questions/293184/one-gnupg-pgp-key-pair-two-emails

于 2017-06-16T02:03:22.760 回答
2

非常像@birchlabs,经过大量挖掘/搜索后,我发现它不是 GPG,而是 GPG Suite。我做到了cask reinstall gpg-suite,它为我解决了这个问题。

于 2018-08-27T16:37:20.410 回答
2

以上都不适合我,我通常使用我的 IDE 终端。

我时不时地遇到这个错误,在大多数情况下它工作得很好。运行后发现问题

 echo "test" | gpg --clearsign

gpg: signing failed: Screen or window too small
gpg: [stdin]: clear-sign failed: Screen or window too small

解决方案:只需增加终端窗口大小。

于 2021-04-12T07:19:48.447 回答
2

上面的答案很好,但它们对我不起作用。解决我的问题的是导出公钥私钥

列出我们从中导出的机器的密钥

$ gpg --list-keys
/home/user/.gnupg/pubring.gpg
--------------------------------
pub 1024D/ABCDFE01 2008-04-13
uid firstname lastname (description) <email@example.com>
sub 2048g/DEFABC01 2008-04-13

导出密钥

$ gpg --output mygpgkey_pub.gpg --armor --export ABCDFE01
$ gpg --output mygpgkey_sec.gpg --armor --export-secret-key ABCDFE01

转到我们要导入的机器并导入

$ gpg --import ~/mygpgkey_pub.gpg
$ gpg --allow-secret-key-import --import ~/mygpgkey_sec.gpg

宾果邦戈,你完成了!

参考:https ://www.debuntu.org/how-to-importexport-gpg-key-pair/

附言。我的密钥最初是在 bootcamp windows 7 上制作的,然后我将它们导出到我的 mac air 上(同一台物理机,实际上不同)

于 2018-03-10T07:35:53.883 回答
2

就我而言,问题在于gpginside的相对名称~/.gitconfig。我把它改成了这个,问题就消失了(Monterey,Macbook M1):

[gpg]
    program = /opt/homebrew/bin/gpg

解释很简单:当git尝试运行gpg它时,它会在一个新的 shell 中运行,而不是~/.profile在我PATH为 homebrew 配置的地方运行。所以,它根本找不到gpg

于 2021-12-14T18:52:58.310 回答
2

如果您的问题是Visual Studio Code不允许提交,但您已经设置了 GPG 签名,则单行答案bash是:

git config --global gpg.program `which gpg2`

如果你有gpgPATH没有gpg2,那就用它来代替。

于 2021-08-04T07:46:30.910 回答
2

我偶然发现此错误不是因为任何配置问题,而是因为我的密钥已过期。在 OSX 上扩展其有效性的最简单方法是打开 GPG Keychain 应用程序(如果您安装了它),它会自动提示您扩展它。两次点击,你就完成了。

于 2019-08-01T23:55:00.633 回答
2

我在 Ubuntu 18.04 上遇到了同样的错误,也担心了好几个星期。终于意识到 gpg2 没有指向任何东西。所以简单地运行

git config --global gpg.program gpg

和tada,它就像魅力一样。

签名提交

您的提交现在将带有经过验证的标签。

于 2019-06-10T18:33:50.120 回答
2

我对最新的 Git 源代码 (2.12.2) 及其所有依赖项的最新源代码(Zlib、Bzip、cURL、PCRE、ReadLine、IDN2、iConv、Unistring 等)有类似的问题。

事实证明libreadline这给 GnuPG 带来了问题:

$ gpg --version
gpg: symbol lookup error: /usr/local/lib/libreadline.so.7: undefined symbol: UP

当然,尝试从 Git 获取有用信息-vvv失败了,所以失败是个谜。

要解决由于 ReadLine 导致的 PGP 失败,请按照无法更新或使用包管理器 -- gpg 错误中的说明进行操作:

在终端:

ls /usr/local/lib

那里有一堆 readline 库(libreadline.so.BLAH-BLAH)所以我:

su
mkdir temp
mv /usr/local/lib/libreadline* temp
ldconfig
于 2017-04-24T08:44:54.213 回答
2

如果您像我一样WSL与您的 IDE 一起使用,您可能会遇到这个问题,因为在使用 IDE 的提交界面提交时密码短语“窗口”永远不会出现(WSL 尚不支持 GUI 应用程序)

解决方法是简单地使用命令行 git,因为它有自己的 cli 窗口供您输入密码。您还需要确保终端“大”到足以弹出(我知道令人惊讶)

使用 WSL 签署提交

于 2021-07-06T07:48:46.913 回答
1

简单地设置它:

brew uninstall gpg 

brew install gpg2
于 2018-05-23T11:12:28.883 回答
1

如果这只是随机发生并且过去一直运行良好,就像我的情况一样,请尝试注销(cmd+shift+q)并重新登录。为我工作

于 2017-05-17T19:17:19.793 回答
1

以上答案似乎都不符合我的问题。我的gpg二进制文件 ( /usr/local/bin/gpg -> /usr/local/MacGPG2/bin/gpg2) 是作为GPG Suite的一部分安装的,而不是通过 brew 安装的。

尽管如此,我觉得建议归结为:“使用gpgbrew 上最新可用的二进制文件”。所以我尝试了:

brew update
brew upgrade git
brew install gpg

# the following are suggestions from brew's Caveats, to make `/usr/local/bin/gpg`
# point to the brew binary:
rm '/usr/local/bin/gpg'
brew link --overwrite gnupg2

我确认我已正确更改了gpgmy$PATH指向 brew 的新可执行文件:

 which gpg
/usr/local/bin/gpg
 ls -l /usr/local/bin/gpg
lrwxr-xr-x  1 burger  admin  33 Feb 13 13:22 /usr/local/bin/gpg -> ../Cellar/gnupg2/2.0.30_3/bin/gpg

我还明确告诉 gitgpg使用哪个二进制文件:

git config --global gpg.program gpg

好吧,也许这不是完全无懈可击的,因为它对路径很敏感。我实际上并没有毫无疑问地确认 git 已经切换到调用 brew gpg

无论如何:这些都不足以git commit再次成功签署我的提交。


最终对我有用的是更新 GPG Suite。我运行的是 2016.7 版本,我发现更新到 2016.10 解决了我的问题。

我打开GPG Keychain.app,然后点击“检查更新……”。使用新版本:签名提交再次正常工作。

于 2017-02-13T15:57:12.487 回答
1

有点奇怪,但请确保您的终端足够大!你可以通过运行来判断它是否太小echo test | gpg --clearsign——它会给你一个非常明显的错误消息让你知道。如果它不够大,您的 GPG 代理将无法显示它的小 ncurses 框。

如果您使用 GUI 代理或不使用 ncurses 的东西,则此选项不适用。

于 2019-08-27T14:22:54.623 回答
1

我正在使用M1 Mac,在那里我尝试了最常见的解决方案但没有奏效,我的问题是 GPG 二进制文件在这里丢失 =>usr/local/bin

最初,我通过安装 GPGbrew并尝试重新安装它,但找不到它存储的二进制文件,后来我从这里安装了 GPG Suite GUI => GPG Suite Tools并且它工作。

最后,我可以在 Github 上登录提交并获得验证徽章。

于 2022-03-03T12:53:40.783 回答
1

就我而言,没有一个解决方案有效,因为我没有手动进入~/.gitconfig并删除以下内容,因为我创建了一个不再是旧 X.509 密钥的新密钥,所以我删除了以下内容,然后我的新密钥开始工作。

[gpg]
    program = gpg
    format = x509
[gpg "x509"]
    program = smimesign
于 2021-02-12T10:48:25.343 回答
1

对我来说,brew已经更新了我gnupggpg要做的就是解决这个问题。

brew link --overwrite gnupg

正如我可以确认的那样,这与gpg正确的位置相关联,which gpg之后一切正常。

于 2020-08-27T08:09:39.250 回答
0

如果你不想处理 brew 来安装 gpg,这似乎时不时会遇到问题,只需从GPG Tools下载 gpg 工具。

当您完成向导时,单击自定义安装并取消选择邮件插件(除非您想使用它)。这些工具似乎可以正常工作而不会遇到任何问题,而且它会在您第一次签署提交后记住您的密码。不需要额外的配置,除了告诉git使用哪个键。

至少这是我的经验。

于 2020-12-15T23:11:30.837 回答
0

prezto在另一个zsh变体中遇到了这个问题。问题是我的gitrepo 是新的并且没有node_modules添加到.gitignore. 一旦我将问题添加node_modules.gitignore问题中,就再也看不到了。所以我的假设是git-info由于这些大而需要时间node_modules

于 2020-11-02T17:29:12.553 回答
0

就我而言,其他答案中提到的解决方案均无效。我发现问题是特定于一个存储库的。再次删除和克隆 repo 解决了这个问题。

于 2018-07-22T11:15:30.867 回答
-1

使用以下命令检查是否启用了 gpg

git config -l | grep gpg

如果它返回true,运行下面的命令来禁用它

git config --global --unset commit.gpgsign

成功运行上述命令后,您应该可以运行 git commit 命令了。

于 2018-06-20T06:46:49.073 回答