
Ich habe GPG4Win und Kleopatra auf meinem Windows 10-System installiert und meine öffentlichen und privaten Schlüsseldateien importiert, die auf einem anderen Computer erstellt wurden. Mein Ziel ist es, meine Commits in Github mit diesen Schlüsseln zu signieren (was ich in der Vergangenheit von der alten Maschine aus getan habe). Nachdem ich die Schlüssel importiert habe, führe ich diesen Befehl imWindows-Befehlszeile oder Powershell, und es werden die Schlüssel angezeigt:
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]
Wenn ich diese Befehle jedoch in Git Bash ausführe (und Git Bash nach dem ersten neu starte), wird nichts angezeigt:
$ git config --global gpg.program "C:\Program Files (x86)\GnuPG\bin\gpg.exe"
$ gpg --list-secret-keys
$ gpg --list-keys
Warum werden die Schlüssel in der Windows-Befehlszeile angezeigt, aber nicht in Git Bash (selbst nachdem das GPG-Programm richtig eingestellt wurde)? Ich vermute, dass es immer noch etwas mit dem Pfad zu tun hat, aber ich dachte, dass das Festlegen der globalen Git-Einstellung das Problem beheben würde.
Antwort1
Ich hatte das gleiche Problem. Bei mir bestand das Problem darin, dass meine installierte Version von GPG4WIN irgendwie wusste, dass sie für meine „echte“ kbx woanders als im Standardordner home/.gnupg suchen musste. Sie können dies sehen, indem Sie gpg --version
CMD und Rstudio/Git bash aufrufen. Sehen Sie sich die erste Zeile nach dem Garantieausschluss an; sie beginnt mit „Home“. Ihre Git-Version ist die Standardversion; Ihre CMD-Version (die Ihre Schlüssel anzeigt) wird ungefähr so aussehen C:\Users\USERNAME\AppData\Roaming\gnupg
. Was Sie tun können, ist eine Umgebungsvariable namensGNUPGHOMEund legen Sie es auf den Speicherort Ihres wahren Zuhauses fest. Dadurch werden alle anderen Einstellungen überschrieben und wenn Sie gpg das nächste Mal aus bash aufrufen, sollte es Ihre Schlüssel finden.
Antwort2
@avraham Der Vorschlag half dabei, GPG zu zwingen, das GPG4WIN-Verzeichnis zu verwenden. Git selbst verwendete jedoch immer noch seine eigene darin gespeicherte GPG-Binärdatei, die mein GPG4WIN-GPG-Repository nicht lesen konnte.
Um Git Bash zu zwingen, die GPGWIN-Version zu verwenden, musste ich die PATH-Variable mithilfe von .bash_profile neu schreiben, um die Ordnersuchreihenfolge zu priorisieren, sodass der GPG4WIN-Ordner zuerst durchsucht wurde. (Standardmäßig verwendet Git Bash in seiner Version von GPG C:\Programme\Git\usr\bin\gpg.exe, da seine Ordner in der Pfadkonfiguration weiter oben stehen.)
Vor der Neuschreibung der Pfadvariable wurden die eigenen Pfade von Git vor allen geerbten Pfaden aus den Umgebungsvariablen von Windows aufgelistet:
$ where gpg
C:\Program Files\Git\usr\bin\gpg.exe
C:\Program Files (x86)\GnuPG\bin\gpg.exe
Nachdem ich die folgende .bash_profile-Datei in mein Home-Verzeichnis geschrieben habe:
$ 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
HINWEIS: Ich verwende den Kurznamen für „Programme (x86)“, um Interpretationsprobleme durch Bash zu vermeiden.
Danach habe ich .bash_profile als Quelle verwendet und schließlich hat git bash die GPG4WIN-Version von gpg über die Befehlszeile verwendet. Um zu überprüfen, ob dies funktioniert hat, führen Sie where gpg
erneut aus:
$ where gpg
C:\Program Files (x86)\GnuPG\bin\gpg.exe
C:\Program Files\Git\usr\bin\gpg.exe
Antwort3
In meinem Fall Git Bash
wird bei der Installation auch GPG im Pfad installiert C:\Program Files\Git\usr\bin\gpg.exe
, und ich installiere auch GPG4Win und Kleopatra.
Unter Bash führe ich aus where gpg
und erhalte beide PfadeC:\Program Files\Git\usr\bin\gpg.exe C:\Program Files (x86)\GnuPG\bin\gpg.exe
Auf CMD führe ich aus where gpg
, bekommeC:\Program Files (x86)\GnuPG\bin\gpg.exe
In PowerShell führe ich aus (get-command gpg.exe).Path
und erhalteC:\Program Files (x86)\Gpg4win\..\GnuPG\bin\gpg.exe