
Я установил 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 --version
CMD и 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