Windows 命令行显示我的 GPG 密钥,但 git bash 没有显示?

Windows 命令行显示我的 GPG 密钥,但 git bash 没有显示?

我在 Windows 10 系统上安装了 GPG4Win 和 Kleopatra,并导入了在另一台机器上创建的公钥和私钥文件。我的目标是使用这些密钥在 Github 中签名我的提交(我以前在旧机器上做过)。导入密钥后,我在Windows 命令行或 Powershell,并显示按键:

C:\Users\michael>gpg --list-keys
C:\Users\michael\AppData\Roaming\gnupg\pubring.kbx
---------------------------------------------
pub   rsa4096 2020-01-14 [SC]
      <snipped the fingerprint>
uid           [ultimate] Michael (Github) <[email protected]>
sub   rsa4096 2020-01-14 [E]

但是,当我在 git bash 中运行这些命令(在第一个命令之后重新启动 git bash)时,没有任何显示:

$ git config --global gpg.program "C:\Program Files (x86)\GnuPG\bin\gpg.exe"
$ gpg --list-secret-keys
$ gpg --list-keys

为什么密钥显示在 Windows 命令行中,但不显示在 git bash 中(即使正确设置了 GPG 程序)?我的猜测是这仍然与路径有关,但我认为设置全局 git 设置可以解决这个问题。

答案1

我遇到了同样的问题。在我看来,问题在于,不知何故,我安装的 GPG4WIN 版本知道在默认 home/.gnupg 文件夹以外的其他地方查找我的“真实”kbx。您可以通过gpg --version在 CMD 和 Rstudio/Git bash 中调用来查看这一点。查看保修免责声明后的第一行;它以“Home”开头。您的 git 版本将是默认版本;您的 CMD 版本(显示您的密钥)将类似于C:\Users\USERNAME\AppData\Roaming\gnupg。您可以做的是创建一个名为的环境变量GNUPGHOME并将其设置为您真正的家的位置。这将覆盖任何其他设置,当您下次从 bash 中调用 gpg 时,它应该会找到您的钥匙。

答案2

@avraham 建议强制 GPG 使用 GPG4WIN 目录,但是 git 本身仍在使用存储在其中的自己的 gpg 二进制文件,无法读取我的 GPG4WIN GPG 存储库。

为了强制 git bash 使用 GPGWIN 的版本,我不得不使用 .bash_profile 重写 PATH 变量,以优先考虑文件夹搜索顺序,以便首先搜索 GPG4WIN 文件夹。(默认情况下,git bash 在其 gpg 版本中使用 C:\Program Files\Git\usr\bin\gpg.exe,因为它的文件夹在路径配置中较高。)

在重写路径变量之前,git 自己的路径列在从 Windows 环境变量继承的任何路径之前:

$ where gpg
C:\Program Files\Git\usr\bin\gpg.exe
C:\Program Files (x86)\GnuPG\bin\gpg.exe

在我的主目录中写入以下 .bash_profile 文件后:

$ cat .bash_profile
# Custom configuration file to force GIT bash to use GPG from GPG4WIN
export PATH=/c/PROGRA~2/GnuPG/bin:/c/Users/ez/bin:/mingw64/bin:/usr/local/bin:/usr/bin:/bin:/mingw64/bin:/usr/bin

注意:我使用“Program Files (x86)”的简称来避免 bash 出现任何解释问题。

此后,我获取了 .bash_profile,最后,git bash 从命令行使用了 gpg 的 GPG4WIN 版本。要验证此操作是否有效,请where gpg再次运行:

$ where gpg
C:\Program Files (x86)\GnuPG\bin\gpg.exe
C:\Program Files\Git\usr\bin\gpg.exe

答案3

就我而言,安装Git Bash还将在路径中安装 gpg C:\Program Files\Git\usr\bin\gpg.exe,并且我也安装了 GPG4Win 和 Kleopatra。

在 Bash 上,我运行where gpg,得到两条路径C:\Program Files\Git\usr\bin\gpg.exe C:\Program Files (x86)\GnuPG\bin\gpg.exe

在 CMD 上,我运行where gpg,得到C:\Program Files (x86)\GnuPG\bin\gpg.exe

在 PowerShell 上,我运行(get-command gpg.exe).Path,得到C:\Program Files (x86)\Gpg4win\..\GnuPG\bin\gpg.exe

相关内容