Командная строка Windows показывает мои ключи GPG, а git bash — нет?

Командная строка Windows показывает мои ключи GPG, а git bash — нет?

Я установил GPG4Win и Kleopatra на свою систему Windows 10 и импортировал файлы открытого и закрытого ключей, созданные на другой машине. Моя цель — подписать свои коммиты в 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 знала, что нужно искать мой "реальный" kbx где-то еще, а не в папке home/.gnupg по умолчанию. Вы можете увидеть это, вызвав gpg --versionCMD и Rstudio/Git bash. Посмотрите на первую строку после отказа от гарантии; она начинается с "Home". Ваша версия git будет версией по умолчанию; ваша версия CMD (которая показывает ваши ключи) будет чем-то вроде C:\Users\USERNAME\AppData\Roaming\gnupg. Что вы можете сделать, так это создать переменную окружения с именемGNUPGHOMEи установите его в место вашего настоящего дома. Это переопределит все остальные настройки, и когда вы в следующий раз вызовете gpg из bash, он должен найти ваши ключи.

решение2

Предложение @avraham помогло заставить GPG использовать каталог GPG4WIN, однако сам git по-прежнему использовал свой собственный двоичный файл gpg, хранящийся в котором, и не мог прочитать мой репозиторий GPG4WIN GPG.

Чтобы заставить git bash использовать версию GPGWIN, мне пришлось переписать переменную PATH с помощью .bash_profile, чтобы установить приоритет порядка поиска папок, чтобы папка GPG4WIN просматривалась первой. (По умолчанию git bash использует в своей версии gpg C:\Program Files\Git\usr\bin\gpg.exe, поскольку его папки находятся выше в конфигурации путей.)

До перезаписи переменной path собственные пути 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 использовал версию GPG4WIN gpg из командной строки. Чтобы убедиться, что это сработало, запустите where gpgеще раз:

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

решение3

В моем случае install Git Bashтакже установит gpg в path 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

Связанный контент