J'ai suivi quelques articles sur les jolis attributs de la note de publication de Git 2.10 . En passant par ce qui a mis à niveau le git à 2.10.0 et apporté des modifications à global .gitconfig
résultant comme suit -
[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
Mais maintenant que j'essaie de signer mes commits en utilisant
git commit -a -S -m "message"
J'arrive à voir l'erreur suivante -
Vous avez besoin d'un mot de passe pour déverrouiller la clé secrète pour
utilisateur: "XYZ (signé numériquement)"
Clé RSA 2048 bits, ID AAAAAAAA, créée le 2016-07-01
erreur: gpg n'a pas réussi à signer les données fatales: impossible d'écrire l'objet de validation
Remarque - Je peux toujours valider les modifications à l'aide degit commit -a -m "message"
Existe-t-il un moyen de surmonter la même chose? Ou tout changement requis dans les gpg
configs pour pouvoir passer à la mise à niveau de git?
Mise à jour 1
Toujours à la recherche d'utilité supplémentaire, suite Y a-t-il un moyen de "signer automatiquement" les validations dans Git avec une clé GPG? . J'ai déjà configuré la clé en utilisant
git config --global user.signingkey ED5CDE14(with my key)
git config --global commit.gpgsign true
et de toute évidence obtenir la même erreur de toute façon.
la source
gpg failed to sign the data
chaque fois que j'utilise-S
. En 2.8, je peux signer un commit sans problème. Je ne sais pas ce qu'il se passe.user.signingkey
résolu mon problème, assez étrangement.user.name
was! = Nom utilisé lors de la création de la clé PGPRéponses:
J'ai rencontré ce problème avec OSX.
Réponse originale:
Il semble comme une mise à jour de GPG (de bière) changé à l' emplacement de
gpg
lagpg1
, vous pouvez changer le binaire où les regards git jusqu'à la GPG:Si vous n'avez pas gpg1:
brew install gpg1
.Réponse mise à jour:
Il semble que gpg1 soit obsolète / "légèrement retiré de l'utilisation" , vous devriez donc probablement mettre à jour vers gpg2, malheureusement cela implique quelques étapes supplémentaires / un peu de temps:
La première partie installe gpg2, et ce dernier est un hack requis pour l'utiliser . Pour le dépannage, voir cette réponse (bien qu'il s'agisse de Linux pas de brassage), il suggère un bon test:
Si ce test réussit (aucune erreur / sortie ne comprend la signature PGP), vous avez mis à jour avec succès la dernière version gpg.
Vous devriez maintenant pouvoir à nouveau utiliser la signature git!
Il convient de noter que vous devrez avoir:
Remarque: Après avoir exécuté un commit signé, vous pouvez le vérifier signé avec:
qui inclura les informations gpg pour le dernier commit.
la source
gnupg2
avecbrew
sali avec des liens symboliques ainsigpg
été enlevé, j'ai eu des liens de correctifs à l' aidebrew link --overwrite gnupg2
.gpg1
c'est l'exécutable toujours exporté.killall gpg-agent && gpg-agent --daemon --use-standard-socket --pinentry-program /usr/local/bin/pinentry
enfin réglé pour moiSi gnupg2 et gpg-agent 2.x sont utilisés, assurez-vous de définir la variable d'environnement
GPG_TTY
.Consultez la documentation de GPG sur les problèmes courants .
la source
set -x GPG_TTY (tty)
votre profil.su
àroot
un serveur distant~/.zshrc
et je peux faire de nouveau des commits, maintenant qu'elle se connecte correctement au terminal. Merci pour votre aide!Si tout échoue, utilisez
GIT_TRACE=1
pour essayer de voir ce que git fait réellement:Exécutez maintenant la commande défaillante manuellement:
Il s'avère que ma clé était expirée,
git
n'était pas à blâmer.la source
.git/config
avait unname
projet spécifié qui ne correspondait pas à mon e-mail de signature. C'était suffisant pour le rejeter.gpg -bsau <key>
sur ma machine n'exécute rien. Est-ce supposé prendre trop de temps à exécuter? Ou cela signifie-t-il que la clé peut être utilisée correctement? @VonC des idées?Je l' ai DONE à travers cette courte et facile recette:
La signature automatique s'engage sur macOS (globalement et avec différents IDE):
Obtenez votre
signingkey
de cette façon .Mettez ce qui suit dans le
gpg.conf
fichier (éditez le fichier avec lanano ~/.gnupg/gpg.conf
commande):Mettez ce qui suit dans le
gpg-agent.conf
fichier (éditez le fichier avec lanano ~/.gnupg/gpg-agent.conf
commande):Mise à jour :
Vous devrez peut-être exécuter la
killall gpg-agent
commande après avoir modifié le fichier de configurationsgpg.conf
, selon les commentaires. Comme l'indique la commande explicite, cette commande mettra fin à l'agent GPG (Gnu Privacy Guard).la source
killall gpg-agent
après avoir défini les fichiers de configuration, puis cela a fonctionné!pinentry-mac
? Je ne dis pas que nous ne pouvons pas, mais l'organisation GPGTools est sauvegardée par une très petite équipe et le dépôt n'a que 5 contributeurs par rapport à l'utilisation,brew install gnupg
ce qui exploite le travail de gnupg.org .user.signingkey
ensemble local non valide , que je n'avais pas remarqué dans ma configuration sourcetree, ni mes paramètres globaux (parce que je ne pensais pas à regarder la configuration locale) Assurez-vous à la fois local (git config --local --get user.signingkey
) et global (git config --global --get user.signingkey
) sont les mêmes, ou mieux encore, désactivent le local s'il n'est pas valide (git config --local --unset user.signingkey
)Peut aider à tuer un processus
gpg-agent
qui pourrait rester bloqué avec d'anciennes données. Donc, un nouveaugpg-agent
départ demanderait un mot de passe.la source
gpg-agent --daemon
pour le démarrerkillall gpg-agent
gpgconf --kill gpg-agent
Suivez l'URL ci-dessous pour configurer la validation signée https://help.github.com/en/articles/telling-git-about-your-signing-key
si toujours obtenir gpg n'a pas réussi à signer les données fatales: impossible d'écrire l'objet de validation
ce n'est pas un problème avec git, c'est avec GPG suivez les étapes ci-dessous
1.
gpg --version
echo "test" | gpg --clearsign
s'il montre:
export GPG_TTY=$(tty)
4.Essayez à nouveau
echo "test" | gpg --clearsign
dans quelle signature PGP est obtenue.git config -l | grep gpg
gpg.program = gpg commit.gpgsign = true
6. appliquer
git commit -S -m "commitMsz"
la source
export GPG_TTY=$(tty)
était l'astuce. Ajouté à mon.zshrc
fichierPour toute personne confrontée à ce problème sur les machines MacOS , essayez ceci:
brew uninstall gpg
brew install gpg2
brew install pinentry-mac
(si besoin)gpg --full-generate-key
Créez une clé à l'aide d'un algorithme.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>
et ajoutez cette clé à GitHub sur les clés GPG: https://github.com/settings/keys (avec les lignes START et END incluses)Si le problème persiste:
test -r ~/.bash_profile && echo 'export GPG_TTY=$(tty)' >> ~/.bash_profile
echo 'export GPG_TTY=$(tty)' >> ~/.profile
Si le problème persiste:
Installez https://gpgtools.org et signez la clé que vous avez utilisée en appuyant sur Signer dans la barre de menus: Clé -> Signer
Si le problème persiste:
Aller à: votre global
.gitconfig
fichier qui dans mon cas est à l' adresse:/Users/gent/.gitconfig
Et modifier le .gitconfig fichier (s'il vous plaît assurez - vous Email et Nom sont les mêmes avec celui que vous avez créé tout en générant la clé) :la source
Mes deux cents ici:
Lorsque vous créez et ajoutez une clé à gpg-agent, vous définissez quelque chose appelé
passphrase
. Maintenant qu'à unpassphrase
certain point expire, etgpg
vous avez besoin de l'entrer à nouveau pour déverrouiller votre clé afin que vous puissiez recommencer à signer.Lorsque vous utilisez un autre programme avec lequel une interface
gpg
,gpg
l'invite vous demandant de saisir votre phrase secrète n'apparaît pas (en principe,gpg-agent
lorsque démonized ne peut pas vous montrer la boîte de dialogue d'entrée dansstdin
).L'une des solutions consiste
gpg --sign a_file.txt
alors à saisir la phrase secrète que vous avez saisie lors de la création de votre clé, puis tout devrait biengpg-agent
se passer ( devrait automatiquement signer)Consultez cette réponse pour savoir comment définir des délais d'expiration plus longs pour votre phrase secrète afin que vous n'ayez pas à le faire tout le temps.
Ou vous pouvez supprimer complètement la phrase secrète avec
ssh-keygen -p
Modifier: faites un
man gpg-agent
pour lire quelques trucs sur la façon dont cela doit se produire automatiquement et ajoutez les lignes:sur votre .bashrc si vous utilisez bash (c'est la bonne réponse mais je garde aussi ma pensée ci-dessus)
la source
Mise à jour d'octobre 2016: le numéro 871 mentionnait «La signature a cessé de fonctionner dans Git 2.9.3»
Git pour Windows 2.10.1 publié il y a deux jours (4 octobre 2016) a corrigé la signature GPG interactive des commits et des balises.
Réponse originale:
En lisant " 7.4 Git Tools - Signing Your Work ", je suppose que vous avez votre "
user.signingkey
" jeu de configuration.Le dernier gros refactoring (avant Git 2.10) autour de gpg était en commit 2f47eae2a , ici ce message d'erreur a été déplacé vers
gpg-interface.c
Un journal sur ce fichier révèle le récent changement de commit af2b21e (Git 2.10)
Vérifiez donc comment vous avez spécifié votre
user.signingkey
configuration et la version de gpg que vous utilisez (gpg1 ou gpg2), pour voir si celles-ci ont un effet sur le message d'erreur.Il y a aussi le commit 0581b54 qui change la condition du
gpg failed to sign the data
message d'erreur (en complément du commit 0d2b664 ):Commit 4322353 montre que gpg utilise maintenant un fichier temporaire, donc il pourrait y avoir de bons problèmes à ce sujet.
la source
user.signingkey
configuration configurée. Utilisant égalementgpg (GnuPG) 2.0.3
.La trace de git était très révélatrice pour ma situation ...
J'avais besoin de générer une clé initiale selon le format qui
git
vérifiait. Il est préférable de copier la valeur transmise-bsau
ci-dessus dans les journaux tels quels et de l'utiliser ci-dessous.Alors ça devient,
Ensuite, cela a fonctionné.
J'espère que cela pourra aider.
la source
git trace
été vraiment utile.En utilisant cygwin, je suis récemment passé à
gpg2
. Ensuite, j'ai eu le même problème pour signer avec git après avoir définigit config gpg.program gpg2
.Essayez
echo "test" | gpg2 --clearsign
de voir si gpg2 fonctionne. Je l'ai trouvé la solution la plus simple à définirgit config gpg.program gpg
, car cela fonctionne. Mais vous obtiendrez également une meilleure erreur de cette façon - par exemple, vous devez installer Pinentry.la source
gpg: signing failed: Inappropriate ioctl for device
qui peut être résolue parexport GPG_TTY=$(tty)
. Source: github.com/keybase/keybase-issues/issues/2798Sur OS X, en utilisant
gnupg2
via brew, je devais juste tuer l'agent gpg , cela arrive parfois:Et définissez la
env
variable si nécessaire:Voir aussi les problèmes GPG courants et cette réponse ici aussi.
la source
alias fix-gpg='pkill -9 gpg-agent && export GPG_TTY=$(tty)'
.J'ai vu des réponses similaires, mais rien de tel que ce qui a fonctionné pour moi. Sous Linux, j'ai dû tuer et redémarrer mon
gpg-agent
avec:Cela a fait l'affaire pour moi. Il semble que vous devez également avoir
user.signingkey
défini votre clé privée à partir de ce que disent d'autres commentaires.la source
Peut-être un agent gpg suspendu.
Essayez
gpgconf --kill gpg-agent
comme discuté icila source
J'ai eu cette erreur sur Ubuntu 18.04 et il s'est avéré que ma clé était expirée .
Pour voir cela, j'ai exécuté ceci et cela a confirmé que mes clés étaient expirées:
Pour corriger cela, j'ai couru (en utilisant l'ID affiché dans la commande précédente):
De là, j'ai prolongé l'expiration
key 0
et lekey 1
suivi de ces instructions qui se résumaient à taperkey 0
puisexpire
et à suivre les invites. Puis répéter pourkey 1
.Ensuite, pour tester cela, j'ai couru:
Et avant le correctif, il a échoué avec l'erreur:
Mais après le correctif, la même commande a réussi à signer le message, donc je savais que les choses fonctionnaient à nouveau!
la source
J'ai rencontré le même problème. Je suis heureux d'annoncer que le problème ne réside pas dans
git 2.10.0
mais avecgnupg 1.4.21
.La rétrogradation temporaire de gnupg vers 1.4.20 a résolu le problème pour moi.
Si vous utilisez homebrew et que vous avez mis à jour vos packages comme je l'ai fait, vous pouvez probablement simplement
brew switch gnupg 1.4.20
revenir en arrière.la source
Assurez-vous que votre e-mail est correctement configuré.
la source
Si l'e-mail associé à l'ID de votre clé GPG est différent de l'e-mail que vous utilisez dans git, vous devrez ajouter un autre ID utilisateur à votre clé OU utiliser une clé à laquelle l'e-mail correspond exactement.
Vous pouvez ajouter un autre UID en utilisant:
Voir pour mo /superuser/293184/one-gnupg-pgp-key-pair-two-emails
la source
Je dois avoir mis à jour accidentellement gpg d'une manière ou d'une autre parce que je l'ai obtenu après avoir essayé de tester si gpg fonctionne:
La course l'a
gpgconf --kill all
réparé pour moi.J'espère que cela aide quelqu'un.
la source
J'ai eu un problème similaire avec les dernières sources Git (2.12.2) construites avec les dernières sources de toutes ses dépendances (Zlib, Bzip, cURL, PCRE, ReadLine, IDN2, iConv, Unistring, etc.).
Il s'est avéré que cela
libreadline
posait des problèmes à GnuPG:Et bien sûr, essayer d'obtenir des informations utiles de Git avec
-vvv
échec, donc l'échec était un mystère.Pour résoudre l'échec PGP en raison de ReadLine, suivez les instructions de Impossible de mettre à jour ou d'utiliser le gestionnaire de packages - erreur gpg :
la source
Les réponses ci-dessus sont excellentes mais elles n'ont pas fonctionné pour moi. Ce qui a résolu mon problème a été d'exporter le public et le secret clés .
lister les clés de la machine d'où nous exportons
exporter les clés
aller à la machine vers laquelle nous importons et importer
bingo bongo, vous avez terminé!
référence: https://www.debuntu.org/how-to-importexport-gpg-key-pair/
ps. Mes clés ont été initialement créées sur bootcamp windows 7 et je les ai exportées sur mon mac air (même machine physique, différente virtuellement)
la source
Je suis sur Ubuntu 18.04 et j'ai eu la même erreur, j'étais inquiet pendant des semaines aussi. Enfin réalisé que gpg2 ne pointe vers rien. Alors lancez simplement
Et tada, ça marche comme du charme.
Vos validations auront désormais une balise vérifiée avec eux.
la source
Je suis tombé sur cette erreur non pas à cause d'un problème de configuration, mais parce que ma clé a expiré. La façon la plus simple de prolonger sa validité sur OSX est d'ouvrir l'application GPG Keychain (si vous l'avez installée) et elle vous invitera automatiquement à la prolonger. Deux clics, et vous avez terminé. Espérons que cela aide les autres Googleurs :)
la source
Cela a commencé à se produire tout à coup pour moi sur Ubuntu, je ne sais pas si une mise à jour récente l'a fait, mais aucun des problèmes existants ne m'était applicable (j'avais
GPG_TTY
réglé, essayé de tuer l'agent, etc.). Lagpg
commande autonome échouait avec cette erreur:J'ai essayé de courir
gpg
avec l'--debug-all
option et j'ai remarqué la sortie ci-dessous:Ce qui précède indique qu'il y a un problème avec le
pinentry
programme. Gpg fonctionne normalementpinentry-curses
pour moi, donc je l'ai changé enpinentry-tty
(je devais d'aptitude install
abord le faire) et l'erreur a disparu (bien que je n'obtienne plus l'entrée de mot de passe en plein écran, mais je n'aime pas ça de toute façon). Pour effectuer ce changement, j'ai dû ajouter la lignepinentry-program /usr/bin/pinentry-tty
à~/.gnupg/gpg-agent.conf
et tuer l'agent avecgpgconf --kill gpg-agent
(il est redémarré la prochaine fois).la source
Aucune des réponses ci-dessus ne semble correspondre à mon problème. Mon
gpg
binaire (/usr/local/bin/gpg -> /usr/local/MacGPG2/bin/gpg2
) a été installé dans le cadre de GPG Suite , plutôt que par brassage.Néanmoins, je sentais que le conseil se résumait à: "utiliser le
gpg
binaire le plus récent disponible sur le brassage". J'ai donc essayé:J'ai vérifié que j'avais correctement changé le
gpg
sur mon$PATH
pour pointer vers le nouvel exécutable de brew:Et j'ai aussi explicitement dit à git quel
gpg
binaire utiliser:Eh bien, ce n'est peut-être pas complètement étanche, car il est sensible au chemin. Je ne suis même pas allé jusqu'à confirmer sans aucun doute que Git était passé à l'invocation du breuvage
gpg
.En tout cas: rien de tout cela n'était suffisant pour que
git commit
je signe à nouveau mes commits avec succès.La chose qui a fonctionné pour moi a finalement été de mettre à jour GPG Suite . J'utilisais la version 2016.7 et j'ai constaté que la mise à jour vers 2016.10 a résolu le problème pour moi.
J'ai ouvert
GPG Keychain.app
et j'ai cliqué sur "Vérifier les mises à jour…". Avec la nouvelle version: les validations signées ont de nouveau fonctionné correctement.la source
l'a installé simplement:
la source
Tout comme @birchlabs, après beaucoup de recherches / fouilles, j'ai trouvé que ce n'était pas GPG, mais plutôt GPG Suite. Je l'ai fait
cask reinstall gpg-suite
et cela m'a résolu.la source
Si cela s'est produit au hasard et a fonctionné parfaitement dans le passé, comme c'est mon cas, essayez de vous déconnecter (
cmd+shift+q
) et de vous reconnecter.la source
Dans mon cas, aucune des solutions mentionnées dans d'autres réponses n'a fonctionné. J'ai découvert que le problème était spécifique à un référentiel. La suppression et le clonage du dépôt ont à nouveau résolu le problème.
la source
Un peu bizarre, mais assurez-vous que votre terminal est assez grand! Vous pouvez dire si elle est trop petite en exécutant
echo test | gpg --clearsign
- cela vous donnera un message d'erreur assez évident vous en informant. S'il n'est pas assez grand, votre agent GPG ne peut pas afficher sa petite boîte ncurses.Celui-ci ne s'appliquera pas si vous utilisez un agent GUI ou quelque chose qui n'utilise pas ncurses.
la source