Ich habe einige Artikel über die hübschen Attribute in Git 2.10 Release Note verfolgt. Durchlaufen, wodurch das Git auf 2.10.0 aktualisiert und Änderungen an Global vorgenommen wurden, .gitconfig
die sich wie folgt ergaben :
[filter "lfs"]
clean = git-lfs clean %f
smudge = git-lfs smudge %f
required = true
[user]
name = xyz
email = [email protected]
signingkey = AAAAAAA
[core]
excludesfile = /Users/xyz/.gitignore_global
editor = 'subl' --wait
[difftool "sourcetree"]
cmd = opendiff \"$LOCAL\" \"$REMOTE\"
path =
[mergetool "sourcetree"]
cmd = /Applications/SourceTree.app/Contents/Resources/opendiff-w.sh \"$LOCAL\" \"$REMOTE\" -ancestor \"$BASE\" -merge \"$MERGED\"
trustExitCode = true
[alias]
lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative
[color "diff"]
old = red strike
new = green italic
Aber jetzt, wo ich versuche, meine Commits mit zu unterschreiben
git commit -a -S -m "message"
Ich sehe folgenden Fehler:
Sie benötigen eine Passphrase, um den geheimen Schlüssel für zu entsperren
Benutzer: "XYZ (digital signiert)"
2048-Bit-RSA-Schlüssel, ID AAAAAAAA, erstellt am 01.07.2016
Fehler: GPG konnte die Daten nicht signieren. Schwerwiegend: Commit-Objekt konnte nicht geschrieben werden
Hinweis - Ich kann weiterhin Änderungen mit festschreibengit commit -a -m "message"
Gibt es eine Möglichkeit, dasselbe zu überwinden? Oder eine Änderung in gpg
Konfigurationen, um mit der Aktualisierung von Git auszukommen?
Update 1
Suchen Sie nach einer Möglichkeit, Commits in Git mit einem GPG-Schlüssel automatisch zu signieren? . Ich habe den Schlüssel bereits mit konfiguriert
git config --global user.signingkey ED5CDE14(with my key)
git config --global commit.gpgsign true
und ganz offensichtlich trotzdem den gleichen Fehler bekommen.
quelle
gpg failed to sign the data
jedes Mal , wenn ich benutze-S
. In 2.8 kann ich problemlos ein Commit unterschreiben. Ich weiss nicht was passiert ist.user.signingkey
mein Problem seltsamerweise behoben.user.name
Antworten:
Ich bin auf dieses Problem mit OSX gestoßen.
Ursprüngliche Antwort:
Es scheint, als ob ein GPG-Update (von Brew) in den Speicherort von
gpg
to geändertgpg1
wurde. Sie können die Binärdatei ändern, in der Git das GPG nachschlägt:Wenn Sie kein gpg1 haben:
brew install gpg1
.Aktualisierte Antwort:
Es sieht so aus, als ob gpg1 veraltet ist / "sanft aus der Nutzung gedrängt" wird , daher sollten Sie wahrscheinlich tatsächlich auf gpg2 aktualisieren. Leider erfordert dies einige weitere Schritte / einige Zeit:
Der erste Teil installiert gpg2, und letzterer ist ein Hack, der erforderlich ist, um es zu verwenden . Informationen zur Fehlerbehebung finden Sie in dieser Antwort (obwohl es sich um Linux handelt, das nicht gebraut wird). Sie schlägt einen guten Test vor:
Wenn dieser Test erfolgreich ist (kein Fehler / keine Ausgabe enthält die PGP-Signatur), haben Sie erfolgreich auf die neueste GPG-Version aktualisiert.
Sie sollten jetzt wieder in der Lage sein, Git Signing zu verwenden!
Es ist erwähnenswert, dass Sie Folgendes benötigen:
Hinweis: Nachdem Sie ein signiertes Commit ausgeführt haben, können Sie überprüfen, ob es signiert ist mit:
Dies beinhaltet GPG-Informationen für das letzte Commit.
quelle
gnupg2
mitbrew
Symlinks durcheinander gebracht wurde, alsogpg
wurde entfernt, ich hatte feste Links mitbrew link --overwrite gnupg2
.gpg1
ist die noch exportierte ausführbare Datei.killall gpg-agent && gpg-agent --daemon --use-standard-socket --pinentry-program /usr/local/bin/pinentry
endlich behoben für michWenn gnupg2 und gpg-agent 2.x verwendet werden, müssen Sie die Umgebungsvariable festlegen
GPG_TTY
.Informationen zu häufigen Problemen finden Sie in der GPG-Dokumentation .
quelle
set -x GPG_TTY (tty)
Ihr Profil an.su
aufroot
auf einem Remote - Server~/.zshrc
und kann wieder Commits durchführen, nachdem sie korrekt mit dem Terminal verbunden ist. Danke für deine Hilfe!Wenn alles fehlschlägt,
GIT_TRACE=1
versuchen Sie mit, zu sehen, was Git tatsächlich tut:Führen Sie nun den fehlgeschlagenen Befehl manuell aus:
Es stellte sich heraus, mein Schlüssel war abgelaufen,
git
war nicht schuld.quelle
.git/config
einname
in einem Projekt angegebenes, das nicht mit meiner Signatur-E-Mail übereinstimmte. Das war genug, um es abzulehnen.gpg -bsau <key>
auf meinem Computer führt nichts aus. Soll die Ausführung zu lange dauern? Oder bedeutet das, dass der Schlüssel in Ordnung ist? @VonC irgendwelche Einblicke?Ich habe es durch dieses kurze und einfache Rezept getan :
Auto-Sign-Commits unter macOS (global und mit verschiedenen IDEs):
Holen Sie sich Ihre
signingkey
auf diese Weise .Fügen Sie Folgendes in die
gpg.conf
Datei ein (bearbeiten Sie die Datei mit demnano ~/.gnupg/gpg.conf
Befehl):Fügen Sie Folgendes in die
gpg-agent.conf
Datei ein (bearbeiten Sie die Datei mit demnano ~/.gnupg/gpg-agent.conf
Befehl):Update :
Möglicherweise müssen Sie den
killall gpg-agent
Befehl nach dem Bearbeiten der Konfigurationsdateigpg.conf
gemäß den Kommentaren ausführen . Wie der selbsterklärende Befehl sagt, beendet dieser Befehl den GPG-Agenten (Gnu Privacy Guard).quelle
killall gpg-agent
nach dem Einstellen der Konfigurationsdateien ausführen , dann funktionierte es!pinentry-mac
? Ich sage nicht, dass wir das nicht können, aber die GPGTools-Organisation wird von einem sehr kleinen Team gesichert und das Repo hat nur 5 Mitwirkende,brew install gnupg
die die Arbeit von gnupg.org nutzen .Kann helfen, Prozesse zu beenden,
gpg-agent
die möglicherweise bei alten Daten hängen bleiben. Also neugpg-agent
gestartet würde nach Passwort fragen.quelle
gpg-agent --daemon
, um es zu startenkillall gpg-agent
gpgconf --kill gpg-agent
Folgen Sie der folgenden URL, um das signierte Commit https://help.github.com/de/articles/telling-git-about-your-signing-key einzurichten
Wenn immer noch gpg nicht signiert werden konnte, konnte das Commit-Objekt nicht geschrieben werden
Dies ist kein Problem mit Git, dies ist mit GPG folgen Sie den folgenden Schritten
1.
gpg --version
echo "test" | gpg --clearsign
wenn es zeigt:
export GPG_TTY=$(tty)
4. Versuchen Sie dann erneut,
echo "test" | gpg --clearsign
die PGP-Signatur zu erhalten.git config -l | grep gpg
gpg.program = gpg commit.gpgsign = true
6. anwenden
git commit -S -m "commitMsz"
quelle
export GPG_TTY=$(tty)
war der Trick. Fügte das zu meiner.zshrc
Datei hinzuVersuchen Sie Folgendes für alle, die auf MacOS- Computern mit diesem Problem konfrontiert sind :
brew uninstall gpg
brew install gpg2
brew install pinentry-mac
(wenn benötigt)gpg --full-generate-key
Erstellen Sie einen Schlüssel mithilfe eines Algorithmus.gpg --list-keys
git config --global user.signingkey <Key from your list>
git config --global gpg.program /usr/local/bin/gpg
git config --global commit.gpgsign true
gpg --armor --export <key>
und fügen Sie diesen Schlüssel unter GPG-Schlüsseln zu GitHub hinzu: https://github.com/settings/keys (mit START- und END-Zeile)Wenn das Problem weiterhin besteht:
test -r ~/.bash_profile && echo 'export GPG_TTY=$(tty)' >> ~/.bash_profile
echo 'export GPG_TTY=$(tty)' >> ~/.profile
Wenn das Problem weiterhin besteht:
Installieren Sie https://gpgtools.org und unterzeichnen Sie die Taste , die Sie durch Drücken verwendet Zeichen in der Menüleiste: Key -> Zeichen
Wenn das Problem weiterhin besteht:
Gehe zu: Ihre globale
.gitconfig
Datei , die in meinem Fall ist:/Users/gent/.gitconfig
Und ändern Sie die .gitconfig Datei (bitte stellen Sie sicher , E - Mail und Namen sind gleich mit der einen , die Sie erstellt haben , während der Schlüssel zu erzeugen) :quelle
Meine zwei Cent hier:
Wenn Sie einen Schlüssel für gpg-agent erstellen und hinzufügen, definieren Sie einen so genannten Namen
passphrase
. Nun, dapassphrase
irgendwann abläuft, undgpg
Sie es erneut eingeben müssen, um Ihren Schlüssel zu entsperren, damit Sie wieder mit dem Signieren beginnen können.Wenn Sie ein anderes Programm verwenden, mit dem eine Schnittstelle besteht
gpg
, wirdgpg
die Aufforderung zur Eingabe Ihrer Passphrase nicht angezeigt (im Grundegpg-agent
kann der Eingabedialog in der Dämonisierung möglicherweise nicht angezeigt werdenstdin
).Eine der Lösungen besteht darin
gpg --sign a_file.txt
, die Passphrase einzugeben, die Sie beim Erstellen Ihres Schlüssels eingegeben haben, und dann sollte alles in Ordnung sein (gpg-agent
sollte automatisch signieren).Siehe diese Antwort erfahren Sie, wie Sie längere Zeitüberschreitungen für Ihre Passphrase festlegen, damit Sie dies nicht immer tun müssen.
Oder Sie können die Passphrase mit vollständig entfernen
ssh-keygen -p
Bearbeiten: Machen Sie eine
man gpg-agent
, um einige Dinge darüber zu lesen, wie das oben Genannte automatisch geschehen soll, und fügen Sie die Zeilen hinzu:auf Ihrer .bashrc, wenn Sie bash verwenden (dies ist die richtige Antwort, aber ich behalte auch meinen Gedankengang oben bei)
quelle
Update Okt. 2016: In Ausgabe 871 wurde erwähnt, dass das Signieren in Git 2.9.3 nicht mehr funktioniert.
Git für Windows 2.10.1, das vor zwei Tagen (4. Oktober 2016) veröffentlicht wurde, hat die interaktive GPG-Signatur von Commits und Tags behoben.
Ursprüngliche Antwort:
Beim Lesen von " 7.4 Git Tools - Signieren Ihrer Arbeit " gehe ich davon aus, dass Sie Ihre "
user.signingkey
" Konfiguration festgelegt haben.Das letzte große Refactoring (vor Git 2.10) um gpg war in commit 2f47eae2a , hier wurde diese Fehlermeldung verschoben
gpg-interface.c
Ein Protokoll in dieser Datei zeigt die letzte Änderung in commit af2b21e (Git 2.10).
Überprüfen Sie also, wie Sie Ihre angegeben haben
user.signingkey
Konfiguration angegeben haben und welche Version von gpg Sie verwenden (gpg1 oder gpg2), um festzustellen, ob diese Auswirkungen auf die Fehlermeldung haben.Es gibt auch ein Commit 0581b54, das die Bedingung für die
gpg failed to sign the data
Fehlermeldung ändert (in Ergänzung zum Commit 0d2b664 ):Commit 4322353 zeigt, dass gpg jetzt eine temporäre Datei verwendet, sodass möglicherweise die richtigen Probleme auftreten.
quelle
user.signingkey
Konfiguration eingestellt. Auch mitgpg (GnuPG) 2.0.3
.Die Git-Spur war für meine Situation sehr aufschlussreich ...
Ich musste einen Anfangsschlüssel für das Format generieren
git
, gegen das geprüft wurde. Am besten kopieren Sie den übergebenen Wert-bsau
wie er ist in die Protokolle und unten zu verwenden.So wird es,
Dann hat es funktioniert.
Ich hoffe, das hilft.
quelle
git trace
war sehr hilfreich.Mit Cygwin habe ich kürzlich zu gewechselt
gpg2
. Dann hatte ich das gleiche Problem beim Signieren mit git nach dem Einstellengit config gpg.program gpg2
.Versuchen Sie
echo "test" | gpg2 --clearsign
zu sehen, ob gpg2 funktioniert. Ich fand es die einfachste Lösung, nur zu setzengit config gpg.program gpg
, weil das funktioniert. Auf diese Weise erhalten Sie jedoch auch einen besseren Fehler - z. B. dass Sie pinentry installieren müssen.quelle
gpg: signing failed: Inappropriate ioctl for device
der durch gelöst werden kannexport GPG_TTY=$(tty)
. Quelle: github.com/keybase/keybase-issues/issues/2798Unter OS X,
gnupg2
wenn ich via Brew benutze, musste ich nur den GPG-Agenten töten , passiert manchmal:Und setzen Sie die
env
Variable bei Bedarf:Siehe auch Allgemeine GPG-Probleme und diese Antwort auch hier.
quelle
alias fix-gpg='pkill -9 gpg-agent && export GPG_TTY=$(tty)'
.Ich habe ähnliche Antworten gesehen, aber nichts genaues, was für mich funktioniert hat. Unter Linux musste ich meine beenden und neu starten
gpg-agent
mit:Das hat den Trick für mich getan. Es sieht so aus, als müssten Sie auch
user.signingkey
Ihren privaten Schlüssel festgelegt haben, wie in einigen anderen Kommentaren angegeben.quelle
Könnte ein hängender GPG-Agent sein.
Versuchen Sie es
gpgconf --kill gpg-agent
wie hier beschriebenquelle
Ich habe diesen Fehler unter Ubuntu 18.04 erhalten und es stellte sich heraus, dass mein Schlüssel abgelaufen war .
Um dies zu sehen, habe ich dies ausgeführt und es wurde bestätigt, dass meine Schlüssel abgelaufen sind:
Um dies zu korrigieren, habe ich ausgeführt (unter Verwendung der im vorherigen Befehl angezeigten ID):
Von dort verlängerte ich den Ablauf
key 0
undkey 1
folgenden diese Anleitung , die eingekocht , um die Eingabekey 0
dannexpire
und folgen Sie die Anweisungen. Dann wiederholen fürkey 1
.Um dies zu testen, lief ich danach:
Und vor dem Fix schlug es mit dem Fehler fehl:
Aber nach dem Fix hat derselbe Befehl die Nachricht erfolgreich signiert, sodass ich wusste, dass die Dinge wieder funktionieren!
quelle
Ich bin auf das gleiche Problem gestoßen. Ich freue mich, berichten zu können, dass das Problem nicht bei,
git 2.10.0
sondern bei liegtgnupg 1.4.21
.Das vorübergehende Herabstufen von gnupg auf 1.4.20 hat das Problem für mich behoben.
Wenn Sie Homebrew verwenden und Ihre Pakete wie ich aktualisiert haben, können Sie wahrscheinlich einfach ausführen
brew switch gnupg 1.4.20
, um zurückzukehren.quelle
Stellen Sie sicher, dass Ihre E-Mail richtig eingestellt ist.
quelle
Wenn sich die der UID Ihres GPG-Schlüssels zugeordnete E-Mail von der in git verwendeten E-Mail unterscheidet, müssen Sie Ihrem Schlüssel eine andere Benutzer-ID hinzufügen ODER einen Schlüssel verwenden, der genau mit der E-Mail übereinstimmt.
Sie können eine weitere UID hinzufügen, indem Sie Folgendes verwenden:
Siehe für mo /superuser/293184/one-gnupg-pgp-key-pair-two-emails
quelle
Ich muss versehentlich gpg irgendwie aktualisiert haben, weil ich dies bekam, nachdem ich versucht hatte zu testen, ob gpg funktioniert:
Laufen hat
gpgconf --kill all
es für mich behoben.Hoffe das hilft jemandem.
quelle
Ich hatte ein ähnliches Problem mit den neuesten Git-Quellen (2.12.2), die zusammen mit den neuesten Quellen aller Abhängigkeiten (Zlib, Bzip, cURL, PCRE, ReadLine, IDN2, iConv, Unistring usw.) erstellt wurden.
Es stellte sich heraus,
libreadline
dass GnuPG Probleme gab:Und natürlich versuchen, nützliche Informationen von Git mit zu bekommen
-vvv
fehlgeschlagen, daher war der Fehler ein Rätsel.Befolgen Sie die Anweisungen unter Fehler beim Aktualisieren oder Verwenden des Paketmanagers - gpg-Fehler, um den PGP-Fehler aufgrund von ReadLine zu beheben :
quelle
Die obigen Antworten sind großartig, aber sie haben bei mir nicht funktioniert. Was mein Problem löste, war das Exportieren sowohl des öffentlichen als auch des geheimen Schlüssels.
Listen Sie die Schlüssel von der Maschine auf, von der wir exportieren
Exportieren Sie die Schlüssel
Gehen Sie zur Maschine, in die wir importieren, und importieren Sie sie
Bingo Bongo, du bist fertig!
Referenz: https://www.debuntu.org/how-to-importexport-gpg-key-pair/
ps. Meine Schlüssel wurden ursprünglich unter Bootcamp Windows 7 erstellt und ich exportierte sie auf meinen Mac Air (dieselbe physische Maschine, virtuell unterschiedlich).
quelle
Ich bin auf Ubuntu 18.04 und habe den gleichen Fehler bekommen, war auch wochenlang besorgt. Endlich wurde klar, dass gpg2 auf nichts zeigt. Also einfach rennen
Und Tada, es funktioniert wie Charme.
Ihre Commits haben jetzt ein verifiziertes Tag mit ihnen.
quelle
Ich bin auf diesen Fehler nicht aufgrund eines Konfigurationsproblems gestoßen, sondern weil mein Schlüssel abgelaufen ist. Der einfachste Weg, die Gültigkeit unter OSX zu verlängern, besteht darin, die GPG-Schlüsselbund-App zu öffnen (sofern Sie sie installiert haben), und Sie werden automatisch aufgefordert, sie zu verlängern. Zwei Klicks und fertig. Hoffentlich hilft das anderen Googlern :)
quelle
Dies begann plötzlich für mich unter Ubuntu, nicht sicher, ob es ein aktuelles Update getan hat, aber keines der vorhandenen Probleme war für mich zutreffend (ich hatte
GPG_TTY
festgelegt, versucht, den Agenten zu töten usw.). Der eigenständigegpg
Befehl schlug mit diesem Fehler fehl:Ich habe versucht,
gpg
mit--debug-all
Option zu laufen und habe die folgende Ausgabe bemerkt:Das Obige weist darauf hin, dass ein Problem mit dem
pinentry
Programm vorliegt. Gpg läuft normalerweisepinentry-curses
für mich, also habe ich es geändertpinentry-tty
(ich mussteaptitude install
es zuerst tun) und der Fehler ging weg (obwohl ich den Vollbild-Passworteintrag nicht mehr bekomme, aber das gefällt mir trotzdem nicht). Um diese Änderung zu machen, hatte ich die Zeile hinzufügen ,pinentry-program /usr/bin/pinentry-tty
um~/.gnupg/gpg-agent.conf
mit und zu töten die Agentengpgconf --kill gpg-agent
(es das nächste Mal neu gestartet wird).quelle
Keine der obigen Antworten schien meinem Problem zu entsprechen. Mein
gpg
binary (/usr/local/bin/gpg -> /usr/local/MacGPG2/bin/gpg2
) wurde als Teil der GPG Suite installiert und nicht durch Brauen.Trotzdem hatte ich das Gefühl, dass der Rat sich auf Folgendes beschränkte: "Verwenden Sie die
gpg
Binärdatei, die die neueste Version von Brew ist". Also habe ich versucht:Ich habe überprüft, ob ich die Meldung korrekt geändert
gpg
habe$PATH
, um auf die neue ausführbare Datei von Brew zu verweisen:Und ich habe git auch ausdrücklich gesagt, welche
gpg
Binärdatei verwendet werden soll:Nun, vielleicht ist das nicht ganz wasserdicht, da es empfindlich auf Pfade reagiert. Ich ging nicht so weit, zweifelsfrei zu bestätigen, dass Git auf das Aufrufen des Gebräus umgestellt hatte
gpg
.Auf jeden Fall: Nichts davon reichte aus, um
git commit
meine Commits erneut erfolgreich zu unterzeichnen.Die Sache, die für mich letztendlich funktionierte, war das Aktualisieren der GPG Suite . Ich habe Version 2016.7 ausgeführt und festgestellt, dass das Update auf 2016.10 das Problem für mich behoben hat.
Ich öffnete
GPG Keychain.app
und drückte auf "Nach Updates suchen ...". Mit der neuen Version: Signierte Commits funktionierten wieder korrekt.quelle
habe es eingerichtet durch einfach:
quelle
Sehr ähnlich wie @birchlabs, nach vielem Graben / Suchen stellte ich fest, dass es nicht GPG war, sondern GPG Suite. Ich habe
cask reinstall gpg-suite
es getan und es hat es für mich gelöst.quelle
Wenn dies nur zufällig passiert ist und in der Vergangenheit wie in meinem Fall einwandfrei funktioniert hat, versuchen Sie, sich abzumelden (
cmd+shift+q
) und sich wieder anzumelden. Hat für mich funktioniertquelle
In meinem Fall hat keine der in der anderen Antwort genannten Lösungen funktioniert. Ich fand heraus, dass das Problem spezifisch für ein Repository war. Durch erneutes Löschen und Klonen des Repos wurde das Problem behoben.
quelle
Ein bisschen komisch, aber stellen Sie sicher, dass Ihr Terminal groß genug ist! Sie können erkennen, ob es zu klein ist, indem Sie laufen
echo test | gpg --clearsign
- es gibt Ihnen eine ziemlich offensichtliche Fehlermeldung, die Sie darüber informiert. Wenn es nicht groß genug ist, kann Ihr GPG-Agent sein kleines ncurses-Feld nicht anzeigen.Dieser gilt nicht, wenn Sie einen GUI-Agenten oder etwas verwenden, das keine Flüche verwendet.
quelle