
我在 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 中呼叫來看到這一點。查看保固免責聲明後的第一行;它以“家”開頭。你的 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
就我而言, installGit Bash
也會在 path 中安裝 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