Je viens de commencer à utiliser git et j'installe git et gpg via homebrew. Pour une raison quelconque, j'obtiens cette erreur lorsque git commit
je regarde tant d'autres questions de stackoverflow concernant ce sujet et aucune d'elles n'a fonctionné pour moi. Comment puis-je corriger cette erreur afin que je puisse télécharger avec succès.
error: gpg failed to sign the data
fatal: failed to write commit object
git config --local user.signingkey
la bonne clé et la signature automatique sera à nouveau. et peut-être désarmé le mondial avecgit config --global --unset user.signingkey
Réponses:
Pour le dépannage, deux choses à essayer d'abord:
git config --global gpg.program gpg2
, pour s'assurer que git utilisegpg2
et nongpg
echo "test" | gpg2 --clearsign
, pour s'assurer qu'ilgpg2
fonctionneSi tout va bien, une chose suivante à essayer:
brew install pinentry
pour vous assurer qu'un bon outil est installé pour la saisie de la phrase de passeSi, après cette installation, vous réessayez
git commit
et obtenez toujours l'failed to sign the data
erreur " ":gpgconf --kill gpg-agent
pour tuer tout agent en cours d'exécution qui pourrait être bloquéSi cela dit
gpgconf
n'est pas installé ou n'a pas d'--kill
option, vous pouvez essayer ceci:cp ~/.gnupg ~/.gnupg-GOOD
pour enregistrer une copie de votre~/.gnupg
pour y revenir plus tard si nécessairebrew install gnupg21
pour installer GnuPG 2.1La raison pour laquelle vous enregistrez une copie de votre
~/.gnupg
répertoire est que GnuPG 2.1 crée / modifie potentiellement certaines données clés d'une manière qui n'est pas rétrocompatible avec GnuPG 2.0 et les versions antérieures, donc si vous souhaitez revenir plus tard, vous pouvez le fairemv ~/.gnupg ~/.gnupg21 && mv ~/.gnupg-GOOD ~/.gnupg
.Sinon, il y a quelques étapes de base à exécuter pour vérifier que vous disposez d'un environnement GnuPG fonctionnel:
gpg2 -K --keyid-format SHORT
, pour vérifier que vous avez au moins une paire de clésSi la sortie de cela montre que vous n'avez pas de clé secrète à utiliser par GnuPG, vous devez en créer une:
gpg2 --gen-key
, pour que GnuPG vous guide à travers les étapes de création d'une paire de clésSi vous recevez un message d'erreur indiquant «ioctl inapproprié pour l'appareil» , procédez comme suit:
export GPG_TTY=$(tty)
et / ou ajouter cela à votre~/.bashrc
ou˜/.bash_profile
la source
gpg2 --gen-key
auparavant, c'est ce que vous devez faire en premier.export GPG_TTY=$(tty)
. Pour autant qu'il existe un moyen d'utiliser git sans gpg, vous devriez pouvoir le faire par défaut ou simplement en exécutantgit config --global commit.gpgsign false
pour annuler globalement la signature gpg de vos commits.echo "test" | gpg2 --clearsign
, trouvé une erreur et cela m'a conduit à ce fil , qui a résolu mon problème: je viens de mettre unexport GPG_TTY=$(tty)
dans mon˜/.bash_profile
fichier, puis rechargé avecsource ˜/.bash_profile
Git a besoin de savoir avec quelle clé il signe.
Après avoir configuré GPG, gpg-agent et vos fichiers gpg.conf (voir ce guide ), vous devez exécuter
Évidemment, remplacez la clé publique à la fin par la vôtre. Si vous voulez que chaque commit soit signé par défaut, utilisez
la source
D'une manière ou d'une autre, votre git est configuré pour signer GPG à chaque commit. La signature avec GPG n'est pas nécessaire pour valider ou pousser à l'aide de git. Cela donne probablement l'erreur car votre mécanisme de signature gpg n'est pas encore configuré.
Si vous êtes nouveau dans git, essayez de le faire fonctionner d'abord sans signature GPG au début, puis ajoutez une connexion plus tard si vous en avez vraiment besoin.
Vous pouvez vérifier comment votre git est configuré en ce qui concerne gpg en faisant:
Qui peut produire zéro ou plusieurs lignes, y compris:
Si "commit.gpgsign" est vrai, alors la signature gpg est activée. Désactivez-le avec:
Ensuite, essayez d'exécuter à nouveau votre validation. Il devrait maintenant fonctionner sans signature gpg. Une fois que vous avez fait fonctionner le git de base, vous devriez essayer de rajouter la signature gpg au mix.
la source
git config --global --unset commit.gpgsign
travaillé pour moi :)Référez-vous à @sideshowbarker et à la solution @Xavier Ho, j'ai résolu mon problème via les étapes suivantes.
Supposons que gpg2 soit installé par brew,
Rappelé par mon collègue, besoin d'ajouter
à ~ / .zshrc si vous utilisez zsh, sinon ajoutez à ~ / .bash_profile
Pour macOS,
le gpg2 est combiné avec gpg dans brew et donc la commande gpg est pointée vers gpg2
et il y a pinentry-mac pour l'entrée de la phrase de passe
Ajouter une ligne
Rappelé par mon collègue, besoin d'ajouter
à ~ / .zshrc si vous utilisez zsh, sinon ajoutez à ~ / .bash_profile
la source
Je l'utilise. Il prend en charge zsha et fonctionne sur le sous-système Windows pour Linux:
la source
Vérifiez que votre clé a expiré. Une fois que vous avez fixé la date d'expiration (pas besoin de créer une nouvelle clé sauf si vous le souhaitez),
git
fonctionnera normalement.Une façon de réparer la clé expirée:
(Remarque:
$
représente l'invite de ligne de commande, tapez les commandes après l'invite; appuyez sur Entrée après chaque commande)$ gpg2 --list-keys
pour trouver l'ID de clé approprié (caractères après\
enpub
ligne)$ gpg2 --edit-key <key id>
- cela ouvre le shell gpg, avec l'invite changée engpg>
gpg> expire
- suivez les instructions pour définir une nouvelle date d'expiration pour la clé primaireEnsuite, s'il y a des sous-clés qui sont expirées (
sub
affichées sur la ligne), réinitialisez également leurs dates d'expiration:gpg> key 1
- sélectionne la première sousgpg> expire
- clé - suivez les instructions pour définir une nouvelle date d'expiration pour la sous-cléRépétez pour chaque sous-clé suivante, si nécessaire.
la source
save
à l'invite gpg lorsque vous avez terminé!Cela a fonctionné pour moi sur Ubuntu 18.04
Vérifiez votre clé gpg
si vous obtenez une réponse vide, générez une clé GPG
réexécutez la première commande, vous devriez obtenir une sortie comme:
définir la clé de chant git
Alors tu peux y aller! (--global est facultatif)
Sinon, si cela ne vous dérange pas de signer avec votre clé ssh
notez que cela n'est pas recommandé en raison d'un problème de sécurité selon cette question ici et ici
la source
J'ai dû fixer le gpg.program au chemin absolu vers gpg:
J'utilise Windows avec cygwin.
la source
choco install gpg4win
Solution:
La source
la source
Cette erreur peut également se produire lorsque votre clé GPG a expiré. Générer une nouvelle clé et l'ajouter à Git devrait résoudre ce problème.
la source
J'ai rencontré ce problème après la mise à niveau vers gnupg 2.x. On verrait que gpg2 fait référence aux clés différemment: j'avais toujours
signingkey = ABC98F11
(paramètre gpg v1) dans mon~/.gitconfig
. Les identificateurs de clé pour gpg2 sont plus longs. Cherchez-les avecgpg --list-secret-keys
la source
J'avais créé une
git
clé avec 3 clés séparées pourcertify
/sign
/encrypt
et la clé montrée comme expirée dans le futur (après avoir bien fonctionné pendant quelques jours):créé une nouvelle clé sans ajouter de sous-clés séparées pour résoudre le problème.
la source
Peut-être que votre configuration Git a été définie sur gpgsign = true . Essayez de le définir sur false si vous ne souhaitez pas attribuer vos validations. Accédez à votre dossier de référentiel et modifiez le fichier
De ceci ...
Pour ça...
la source
Pour moi, cette erreur a commencé à se produire avec
git tag -s
Debian GNU / Linux lorsque je suis passé depinentry-gnome3
àpinentry-curses
(utilisationupdate-alternatives --config pinentry
) pour un accès à distance plus facile. Cela ne s'est produit qu'avecgit tag -s
, pas avecgpg
(par exemplegpg --clearsign
) lui-même.Le seul changement nécessaire pour le faire fonctionner à nouveau dans ce cas était d'ajouter
export GPG_TTY=$(tty)
à mes fichiers de démarrage shell.Je n'ai cependant pas reçu le message d'erreur «ioctl inapproprié pour le périphérique» mentionné comme indicateur de ce correctif dans une autre réponse à cette question.
Remarque: Étant donné que la cause de cette erreur était complètement différente de celle de ceux qui avaient suggéré
export GPG_TTY=$(tty)
auparavant (généralement comme indice secondaire) dans d'autres réponses à cette question, j'ai décidé que cette question nécessitait une autre réponse mentionnant queexport GPG_TTY=$(tty)
c'était peut-être le correctif principal et seule chose nécessaire dans certains cas.la source
update-alternatives --config pinentry
l'a fait pour moi. Je suis SSH sur mon bureau et j'aipinentry
été défini sur/usr/bin/pinentry-gnome3
(ce qui devrait avoir un repli TTY lorsque SSH est activé ou lorsque je passe à une console virtuelle). Mais cela ne fonctionnait pas, apparemment. Définir la valeur par défaut a/usr/bin/pinentry-tty
fait l'affaire pour moi. Je devrai peut-être le remettre en place lorsque je reviendrai sur mon bureau, mais pour l'instant, je vais bien.export GPG_TTY=$(tty)
n'était pas suffisant. Je l'ai fait mais j'ai dû changerpinentry
avant de pouvoir signer mon commit.Ce qui m'a résolu, c'était de m'assurer que le nom de la clé correspondait à mon nom d'utilisateur git. Je suppose que les e-mails doivent également correspondre. Cela pourrait avoir à voir avec l'utilisation de GPG KeyChain sur mon Mac. Pas certain.
Je pensais nommer la clé lorsque j'ai rempli cela, mais je suppose que cela demandait mon nom (nom d'utilisateur git).
la source
J'ai eu cette erreur sur macos - pour essayer de résoudre les problèmes, j'ai essayé de répertorier les clés pour voir si elles avaient expiré en utilisant
gpg2 --list-keys
- j'ai vérifié que les clés n'avaient pas expiré et que la clé appropriée était définie dans ma configuration en utilisantgit config --global user.signingkey
.Après avoir exécuté ces commandes, j'ai été soudainement capable de refaire des commits signés sans problème. Je n'ai pas changé mes fichiers de configuration ou mes clés - je n'ai même pas créé une nouvelle instance de Terminal. Il semblait juste que le gpg2 était en quelque sorte dans un état étrange sur mon mac.
la source
J'ai résolu le problème en installant
brew install gpg2
puis en faisantgit config --global gpg.program gpg2
la source
La même erreur peut également être causée lorsque vous avez une clé expirée dans votre configuration git.
Veuillez vérifier le contenu
cat .git/config
et rechercher lasigningkey
valeur et vérifier si elle est expirée. Si oui, mettez-le à jour avec le nouveau.la source
Si vous utilisez une carte à puce / yubikey pour stocker votre clé GPG et que vous définissez la configuration
signkey
de git par la clé stockée dans la carte (et que toutes les réponses ci-dessus ne semblent pas résoudre votre problème), votre code PIN bloqué de la carte peut être le cause principale de ce problème.Pour vérifier le code PIN bloqué:
Si le compteur est similaire à
Ensuite, votre code PIN est bloqué (après 3 essais infructueux).
Pour débloquer le code PIN:
la source
Pour moi un simple
brew unintstall gnupg && brew cask reinstall gpg-suite
résout le problème.Il désinstalle le (dans mon cas) manuellement gpg homebrew-istalled et réinstalle toute la suite GPG.
la source
Dans mon cas, j'avais une configuration gpg mixte et une configuration smimesign donnée dans la documentation de signature de commit ici: https://help.github.com/en/github/authenticating-to-github/telling-git-about-your-signing- clé
Après avoir travaillé dessus pendant des heures, j'ai trouvé le meilleur moyen de corriger tout ce qui était lié à gpg et à reconfigurer gpg.
Comme mentionné dans la réponse de @Jason Thrasher, trouvez toute la configuration git liée à gpg en utilisant:
Ensuite, désactivez tout golablly ainsi que localement en utilisant:
Puis reconfigurez en suivant la documentation officielle donnée ci-dessus. J'espère que cela t'aides.
la source
Si vous aviez déjà configuré votre pinentry et votre gpg et que cela ne fonctionnait plus de nulle part:
Vérifiez si votre gpg fonctionne:
Si c'est le cas
gpg: signing failed: No pinentry
, redémarrez simplement le client du démon gpg, qui se bloque de temps en temps:Maintenant, cela devrait fonctionner:
la source
Dans mon cas, cette erreur s'est produite lors de l'exécution
git commit
sur une petitetmux
fenêtre qui ne pouvait pas s'adapter à l'invite de phrase de passe.la source
Cela vous aidera à vous en débarrasser
git config commit.gpgsign false
la source