Ich habe gerade angefangen, git zu verwenden und ich installiere git und gpg über Homebrew. Aus irgendeinem Grund erhalte ich diesen Fehler, wenn ich git commit
mir so viele andere Fragen zum Stapelüberlauf zu diesem Thema angesehen habe und keine davon für mich funktioniert hat. Wie kann ich diesen Fehler beheben, damit ich erfolgreich hochladen kann?
error: gpg failed to sign the data
fatal: failed to write commit object
git config --local user.signingkey
Stellen Sie einfach den richtigen Schlüssel ein und es wird erneut automatisch signiert. und vielleicht deaktivieren Sie die globale mitgit config --global --unset user.signingkey
Antworten:
Versuchen Sie zur Fehlerbehebung zunächst zwei Dinge:
git config --global gpg.program gpg2
, um sicherzustellen, dass Git verwendetgpg2
und nichtgpg
echo "test" | gpg2 --clearsign
, um sicherzustellen, dassgpg2
selbst funktioniertWenn das alles in Ordnung aussieht, versuchen Sie es als nächstes:
brew install pinentry
Sie diese Option aus, um sicherzustellen, dass ein gutes Tool für die Eingabe von Passphrasen installiert istWenn Sie nach dieser Installation erneut versuchen
git commit
und trotzdem denfailed to sign the data
Fehler " " erhalten:gpgconf --kill gpg-agent
, um einen laufenden Agenten zu töten, der möglicherweise hängen bleibtWenn dies besagt, dass
gpgconf
es nicht installiert ist oder keine--kill
Option hat, können Sie Folgendes versuchen:cp ~/.gnupg ~/.gnupg-GOOD
um eine Kopie von Ihnen zu speichern und~/.gnupg
bei Bedarf später darauf zurückzugreifenbrew install gnupg21
um GnuPG 2.1 zu installierenDer Grund für das Speichern einer Kopie Ihres
~/.gnupg
Verzeichnisses besteht darin, dass GnuPG 2.1 möglicherweise einige Schlüsseldaten auf eine Weise erstellt / ändert, die nicht mit GnuPG 2.0 und früher abwärtskompatibel ist. Wenn Sie also später zurückkehren möchten, können Sie dies tunmv ~/.gnupg ~/.gnupg21 && mv ~/.gnupg-GOOD ~/.gnupg
.Andernfalls müssen einige grundlegende Schritte ausgeführt werden, um zu überprüfen, ob Sie eine funktionierende GnuPG-Umgebung haben:
gpg2 -K --keyid-format SHORT
, um zu überprüfen, ob Sie mindestens ein Schlüsselpaar habenWenn die Ausgabe zeigt, dass Sie keinen geheimen Schlüssel für GnuPG haben, müssen Sie einen erstellen:
gpg2 --gen-key
, damit GnuPG Sie durch die Schritte zum Erstellen eines Schlüsselpaars führtWenn Sie die Fehlermeldung "Unangemessenes ioctl für Gerät" erhalten , gehen Sie wie folgt vor :
export GPG_TTY=$(tty)
und / oder fügen Sie es Ihrem~/.bashrc
oder hinzu˜/.bash_profile
quelle
gpg2 --gen-key
zuvor gelaufen sind, müssen Sie dies zuerst tun.export GPG_TTY=$(tty)
. Soweit es eine Möglichkeit gibt, git ohne gpg zu verwenden, sollten Sie dies standardmäßig tun können, oder indem Sie einfach diegit config --global commit.gpgsign false
global nicht festgelegte gpg-Signatur Ihrer Commits ausführen.echo "test" | gpg2 --clearsign
, fand einen Fehler und führte mich zu diesem Thread , der mein Problem löste: Ich habe einfach einenexport GPG_TTY=$(tty)
in meine˜/.bash_profile
Dateisource ˜/.bash_profile
Git muss wissen, mit welchem Schlüssel es signiert.
Nachdem Sie GPG, gpg-agent und Ihre gpg.conf-Dateien eingerichtet haben (siehe dieses Handbuch ), müssen Sie ausführen
Ersetzen Sie natürlich den öffentlichen Schlüssel am Ende durch Ihren eigenen. Wenn Sie möchten, dass jedes Commit standardmäßig signiert wird, verwenden Sie
quelle
Irgendwie ist dein Git so konfiguriert, dass es bei jedem Commit GPG signiert. Das Signieren mit GPG ist nicht erforderlich, um mit git ein Commit oder Push durchzuführen. Es ist wahrscheinlich, dass der Fehler auftritt, weil Ihr GPG-Signaturmechanismus noch nicht konfiguriert ist.
Wenn Sie neu in Git sind, versuchen Sie, es zuerst ohne GPG-Signierung zum Laufen zu bringen, und fügen Sie dann später die Anmeldung hinzu, wenn Sie es wirklich brauchen.
Sie können überprüfen, wie Ihr Git in Bezug auf GPG konfiguriert ist, indem Sie Folgendes tun:
Welche null oder mehr Zeilen erzeugen können, einschließlich:
Wenn "commit.gpgsign" wahr ist, ist die GPG-Signatur aktiviert. Deaktivieren Sie es mit:
Versuchen Sie dann erneut, Ihr Commit auszuführen. Es sollte jetzt ohne GPG-Signatur ausgeführt werden. Nachdem Sie das grundlegende Git zum Laufen gebracht haben, sollten Sie versuchen, dem Mix wieder eine GPG-Signatur hinzuzufügen.
quelle
git config --global --unset commit.gpgsign
arbeitete für mich :)Siehe @sideshowbarker und @ Xavier Ho Lösung, ich habe mein Problem durch die folgenden Schritte gelöst.
Angenommen, gpg2 wurde von Brew installiert.
Von meinem Kollegen erinnert, muss anhängen
an ~ / .zshrc, wenn zsh verwendet wird, andernfalls an ~ / .bash_profile anhängen
Für macOS
Das gpg2 wird im Gebräu mit gpg kombiniert, und daher zeigt der Befehl gpg auf gpg2
und es gibt pinentry-mac für die Eingabe von Passphrasen
Zeile hinzufügen
quelle
Ich benutze es. Es unterstützt zsha und funktioniert unter Windows Subsystem for Linux:
quelle
Überprüfen Sie, ob Ihr Schlüssel abgelaufen ist. Sobald Sie das Ablaufdatum festgelegt haben (Sie müssen keinen neuen Schlüssel erstellen, es sei denn, Sie möchten),
git
funktioniert dies wie gewohnt.Eine Möglichkeit, den abgelaufenen Schlüssel zu beheben:
(Hinweis:
$
Stellt die Eingabeaufforderung dar. Geben Sie die Befehle nach der Eingabeaufforderung ein. Drücken Sie nach jedem Befehl die Eingabetaste.)$ gpg2 --list-keys
die entsprechende Taste - ID (Zeichen nach finden\
aufpub
Linie)$ gpg2 --edit-key <key id>
- Dadurch wird die GPG-Shell geöffnet und die Eingabeaufforderung in geändertgpg>
gpg> expire
- Befolgen Sie die Anweisungen, um das neue Ablaufdatum für den Primärschlüssel festzulegenWenn als nächstes Unterschlüssel abgelaufen sind (
sub
wird in der Zeile angezeigt ), setzen Sie auch deren Ablaufdatum zurück:gpg> key 1
- wählt den ersten Unterschlüssel ausgpg> expire
- Befolgen Sie die Anweisungen, um das neue Ablaufdatum für den Unterschlüssel festzulegenWiederholen Sie diesen Vorgang nach Bedarf für jeden nachfolgenden Unterschlüssel.
quelle
Dies funktionierte für mich am Ubuntu 18.04
Überprüfen Sie Ihren GPG-Schlüssel
Wenn Sie eine leere Antwort erhalten, generieren Sie einen GPG-Schlüssel
Führen Sie den ersten Befehl erneut aus. Sie sollten eine Ausgabe erhalten als:
setze git Gesangstaste
dann bist du gut zu gehen! (--global ist optional)
Alternativ, wenn es Ihnen nichts ausmacht, mit Ihrem SSH-Schlüssel zu signieren
Beachten Sie, dass dies aufgrund eines Sicherheitsproblems gemäß dieser Frage hier und hier nicht empfohlen wird
quelle
Ich musste das gpg.program auf den absoluten Pfad zu gpg korrigieren:
Ich benutze Windows mit Cygwin.
quelle
choco install gpg4win
Lösung:
Quelle
quelle
Dieser Fehler kann auch auftreten, wenn Ihr GPG-Schlüssel abgelaufen ist. Das Generieren eines neuen Schlüssels und das Hinzufügen zu Git sollte dies beheben.
quelle
Ich habe dieses Problem nach dem Upgrade auf gnupg 2.x festgestellt. Es würde sich herausstellen, dass gpg2 Schlüssel anders referenziert: Ich hatte immer noch
signingkey = ABC98F11
(gpg v1-Einstellung) in meinem~/.gitconfig
. Die Schlüsselkennungen für gpg2 sind länger. Schlage sie mit nachgpg --list-secret-keys
quelle
Ich hatte einen
git
Schlüssel mit 3 separaten Schlüsseln fürcertify
/sign
/encrypt
& erstellt. Der Schlüssel wurde in Zukunft als abgelaufen angezeigt (nachdem ich einige Tage lang einwandfrei gearbeitet hatte):hat einen neuen Schlüssel erstellt, ohne separate Unterschlüssel hinzuzufügen, um das Problem zu lösen.
quelle
Möglicherweise wurde Ihre Git-Konfiguration auf gpgsign = true gesetzt . Versuchen Sie, es auf false zu setzen, wenn Sie Ihre Commits nicht zuweisen möchten. Gehen Sie zu Ihrem Repository-Ordner und ändern Sie die Datei
Davon...
Dazu ...
quelle
Bei mir trat dieser Fehler unter
git tag -s
Debian GNU / Linux auf, als ich für einen einfacheren Fernzugriff vonpinentry-gnome3
aufpinentry-curses
(usingupdate-alternatives --config pinentry
) wechselte . Es geschah nur mitgit tag -s
, nicht mitgpg
(zBgpg --clearsign
) sich selbst.Die einzige Änderung, die erforderlich ist, damit es in diesem Fall wieder funktioniert, war das Hinzufügen
export GPG_TTY=$(tty)
zu meinen Shell-Startdateien.Ich habe jedoch nicht die Fehlermeldung "Unangemessenes Ioctl für Gerät" erhalten, die als Indikator für dieses Update in einer anderen Antwort auf diese Frage angegeben wurde.
Hinweis: Da die Ursache für diesen Fehler völlig anders war als für diejenigen, die
export GPG_TTY=$(tty)
zuvor (normalerweise als Nebenhinweis) in anderen Antworten auf diese Frage vorgeschlagen haben, habe ich beschlossen, dass diese Frage eine andere Antwort benötigt, in der erwähnt wird, dass diesexport GPG_TTY=$(tty)
möglicherweise die Hauptbehebung ist einzige Sache, die in einigen Fällen notwendig ist.quelle
update-alternatives --config pinentry
habe es für mich getan. Ich bin SSH'd in meinen Desktop undpinentry
wurde auf/usr/bin/pinentry-gnome3
(was sollte eine TTY Notlösung , wenn SSH'd in oder beim Einschalten auf eine virtuelle Konsole). Aber es hat anscheinend nicht funktioniert. Das Setzen der Standardeinstellung/usr/bin/pinentry-tty
hat den Trick für mich erledigt. Ich muss es möglicherweise zurücksetzen, wenn ich wieder auf meinem Desktop bin, aber im Moment bin ich gut.export GPG_TTY=$(tty)
war nicht genug. Ich habe es getan, musste aber wechseln,pinentry
bevor ich mein Commit unterschreiben konnte.Was es für mich gelöst hat, war sicherzustellen, dass der Name des Schlüssels mit meinem Git-Benutzernamen übereinstimmt. Ich gehe davon aus, dass die E-Mails auch übereinstimmen müssen. Dies hat möglicherweise damit zu tun, dass ich GPG KeyChain auf meinem Mac verwende. Nicht sicher.
Ich dachte, ich würde den Schlüssel benennen, als ich ihn ausfüllte, aber ich glaube, er fragte nach meinem Namen (Git-Benutzername).
quelle
Ich hatte diesen Fehler auf Macos - um zu versuchen, Fehler zu beheben, habe ich versucht, Schlüssel aufzulisten, um festzustellen, ob sie mit abgelaufen sind.
gpg2 --list-keys
Ich habe überprüft, ob die Schlüssel nicht abgelaufen sind und ob der richtige Schlüssel in meiner Konfiguration mit festgelegt wurdegit config --global user.signingkey
.Nachdem ich diese Befehle ausgeführt hatte, konnte ich plötzlich wieder ohne Probleme signierte Commits ausführen. Ich habe meine Konfigurationsdateien oder Schlüssel nicht geändert - ich habe nicht einmal eine neue Terminalinstanz erstellt. Es schien nur so, als ob das gpg2 auf meinem Mac irgendwie in einem seltsamen Zustand war.
quelle
Ich löste das Problem bei der Installation
brew install gpg2
dann tungit config --global gpg.program gpg2
quelle
Der gleiche Fehler kann auch verursacht werden, wenn Sie den Schlüssel in Ihrer Git-Konfiguration abgelaufen sind.
Bitte überprüfen Sie den Inhalt von
cat .git/config
und suchen Sie nachsigningkey
Wert und prüfen Sie, ob er abgelaufen ist. Wenn ja, aktualisieren Sie es mit dem neuen.quelle
Wenn Sie Smartcard / yubikey zum Speichern Ihres GPG-Schlüssels verwenden und den einstellen
signkey
Git-Konfiguration anhand des auf der Karte gespeicherten (und alle obigen Antworten scheinen Ihr Problem nicht zu lösen), ist Ihre blockierte PIN der Karte möglicherweise die Grundursache für dieses Problem.So überprüfen Sie die gesperrte PIN:
Wenn der Zähler ähnlich ist
Dann wird Ihre PIN gesperrt (nach 3 erfolglosen Versuchen).
So entsperren Sie die PIN:
quelle
Für mich ein einfaches
brew unintstall gnupg && brew cask reinstall gpg-suite
löst Lösung das Problem.Es deinstalliert das (in meinem Fall) manuell von Homebrew installierte GPG und installiert die gesamte GPG Suite neu.
quelle
In meinem Fall hatte ich eine gemischte GPG-Konfiguration und Smimesign-Konfiguration, die in der Commit-Signatur-Dokumentation hier angegeben sind: https://help.github.com/de/github/authenticating-to-github/telling-git-about-your-signing- Schlüssel
Nachdem ich stundenlang daran gearbeitet hatte, fand ich heraus, dass der beste Weg, dies zu korrigieren, darin bestand, alles, was mit gpg zu tun hat, zu deaktivieren und gpg neu zu konfigurieren.
Wie in der Antwort von @Jason Thrasher erwähnt, finden Sie alle Git-Konfigurationen im Zusammenhang mit GPG mit:
Dann deaktivieren Sie alles golablly sowie lokal mit:
Konfigurieren Sie dann gemäß der oben angegebenen offiziellen Dokumentation neu. Hoffe das hilft.
quelle
Wenn Sie Ihre Pinentry und Ihr GPG zuvor eingerichtet hatten und es aus dem Nichts nicht mehr funktionierte:
Überprüfen Sie, ob Ihr GPG funktioniert:
Wenn es heißt
gpg: signing failed: No pinentry
, starten Sie einfach den gpg-Daemon-Client neu, der von Zeit zu Zeit hängen bleibt:Jetzt sollte es funktionieren:
quelle
In meinem Fall trat dieser Fehler auf, wenn er
git commit
in einem kleinentmux
Fenster ausgeführt wurde, das nicht zur Passphrase-Eingabeaufforderung passte.quelle
Dies wird Ihnen helfen, es loszuwerden
git config commit.gpgsign false
quelle