Je viens juste de commencer à utiliser git et j’installe git et gpg via homebrew . Pour une raison quelconque, j’obtiens cette erreur en écrivant le git commit
. 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
Pour le dépannage, deux choses à essayer en premier:
git config --global gpg.program gpg2
, pour vous assurer que git utilise gpg2
et non gpg
echo "test" | gpg2 --clearsign
, pour vous assurer que gpg2
lui-même fonctionneSi tout vous convient, essayez ensuite:
brew install pinentry
pour vous assurer d'avoir un bon outil installé pour la saisie de la phrase secrèteSi, après cette installation, vous essayez à nouveau git commit
et obtenez toujours l'erreur "failed to sign the data
":
gpgconf --kill gpg-agent
pour tuer tout agent en cours pouvant être bloquéSi cela indique que gpgconf
n’est pas installé ou n’a pas d’option --kill
, vous pourriez essayez ceci:
cp ~/.gnupg ~/.gnupg-GOOD
pour enregistrer une copie de votre ~/.gnupg
pour revenir à plus tard si nécessairebrew install gnupg21
pour installer GnuPG 2.1La raison pour enregistrer une copie de votre répertoire ~/.gnupg
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 versions antérieures, donc si vous souhaitez revenir plus tard, vous peut faire mv ~/.gnupg ~/.gnupg21 && mv ~/.gnupg-GOOD ~/.gnupg
.
Sinon, certaines étapes de base à exécuter pour vérifier que votre environnement GnuPG est opérationnel sont les suivantes:
gpg2 -K --keyid-format SHORT
, pour vérifier que vous avez au moins une paire de clésSi le résultat indique que GnuPG ne dispose pas de clé secrète, vous devez en créer une:
gpg2 --gen-key
, pour que GnuPG vous guide pas à pas dans la création d'une paire de clésSi vous recevez un message d'erreur indiquant “ioctl inapproprié pour le périphérique” , procédez comme suit:
export GPG_TTY=$(tty)
et/ou ajoutez-le à votre ~/.bashrc
ou ˜/.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
git config --global user.signingkey EB11C755
Évidemment, remplacez la clé publique à la fin par la vôtre. Si vous voulez que chaque commit soit signé par défaut, utilisez
git config --global commit.gpgsign true
D'une manière ou d'une autre votre git est configuré pour signer par GPG chaque commit. Signer avec GPG n'est pas nécessaire pour valider ou utiliser Push avec git. C'est probablement parce que votre mécanisme de signature gpg n'est pas encore configuré.
Si vous débutez avec git, essayez d’abord de le faire fonctionner sans la signature de GPG, puis d’ajouter la 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:
git config -l | grep gpg
Qui peut produire zéro ou plusieurs lignes, y compris:
commit.gpgsign=true
Si "commit.gpgsign" est vrai, la signature gpg est activée. Désactivez-le avec:
git config --global --unset commit.gpgsign
Ensuite, essayez de relancer votre commit. Il devrait maintenant fonctionner sans signature gpg. Une fois que vous avez réussi à utiliser le git de base, essayez d’ajouter la signature gpg au mélange.
Reportez-vous aux solutions @sideshowbarker et @Xavier Ho pour résoudre le problème en procédant comme suit.
Suppose que gpg2 est installé par le brasseur,
git config --global gpg.program gpg2
brew install pinentry
gpgconf --kill gpg-agent
gpg2 -K --keyid-format SHORT
// no key found then generate new one
gpg2 --gen-key
gpg2 -K --keyid-format SHORT
... /. gnupg/pubring.gpg
sec rsa2048 / 0A61C6FC 2017-06-29 [SC] [expire: 2019-06-29]
git config --global user.signingkey 0A61C6FC
Rappelé par mon collègue, besoin d’annexer
export GPG_TTY=$(tty)
à ~/.zshrc si vous utilisez zsh, sinon ajoutez-le à ~/.bash_profile
le gpg2 est combiné avec gpg dans le brassage et la commande gpg est donc dirigée vers gpg2
brew install gpg2
infusion info gpg
gnupg: stable 2.2.6 (en bouteille)
git config --global gpg.program gpg
gpg -K --keyid-format SHORT
et il y a pinentry-mac pour la saisie de la phrase secrète
brew install pinentry-mac
vim ~/.gnupg/gpg-agent.conf
Ajouter une ligne
programme-pinentry/usr/local/bin/pinentry-mac
J'ai rencontré ce problème après la mise à niveau vers gnupg 2.x. Nous aurions vu que gpg2 référençait les clés différemment: j'avais toujours signingkey = ABC98F11
(paramètre gpg v1) dans mon ~/.gitconfig
. Les identifiants de clé pour gpg2 sont plus longs. Cherchez-les avec gpg --list-secret-keys
Peut-être que votre configuration Git a été définiegpgsign = true. Essayez de le définir sur false si vous ne voulez pas assigner vos commits. Accédez au dossier de votre référentiel et modifiez le fichier.
nano .git/config
A partir de ça ...
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "Origin"]
url = [email protected]:yourrepo/project.git
fetch = +refs/heads/*:refs/remotes/Origin/*
[branch "master"]
remote = Origin
merge = refs/heads/master
[user]
signingkey = <GPG-KEY>
[commit]
gpgsign = true
Pour ça...
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "Origin"]
url = [email protected]:yourrepo/project.git
fetch = +refs/heads/*:refs/remotes/Origin/*
[branch "master"]
remote = Origin
merge = refs/heads/master
[user]
signingkey = <GPG-KEY>
[commit]
gpgsign = false
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.
Pour moi, cette erreur a commencé à se produire avec git tag -s
sous Debian GNU/Linux lorsque je suis passé de pinentry-gnome3
à pinentry-curses
(avec update-alternatives --config pinentry
) pour faciliter l’accès à distance. Cela s'est produit uniquement avec git tag -s
, pas avec gpg
(par exemple gpg --clearsign
) lui-même.
Le seul changement nécessaire pour que cela fonctionne à nouveau dans ce cas-ci consistait à ajouter export GPG_TTY=$(tty)
à mes fichiers de démarrage Shell.
Je n'ai toutefois pas reçu le message d'erreur «Inapproprié ioctl pour le périphérique» mentionné comme indicateur de ce correctif dans une autre réponse à cette question.
Remarque: Etant 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 en guise de soupçon) dans d'autres réponses à cette question, j'ai décidé que cette question nécessitait une autre réponse mentionnant que export GPG_TTY=$(tty)
pouvait être la solution principale et unique nécessaire dans certains cas.
Vérifiez que votre clé est expirée. Une fois que vous avez corrigé la date d'expiration (inutile 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 la 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 clé approprié (caractères après \
sur la ligne pub
)
$ gpg2 --edit-key <key id>
- ceci ouvre le shell gpg, avec invite changée en gpg>
gpg> expire
- suivez les instructions pour définir une nouvelle date d'expiration pour la clé primaire
Ensuite, s'il y a des sous-clés qui ont expiré (sub
apparaît sur la ligne), réinitialisez également leurs dates d'expiration:
gpg> key 1
- sélectionne la première sous-clé gpg> expire
- suivez les instructions pour définir une nouvelle date d'expiration pour la sous-clé
Répétez cette opération pour chaque sous-clé suivante, si nécessaire.
Cela a fonctionné pour moi sur Ubuntu 18.04
Vérifiez votre clé gpg
gpg -K --keyid-format LONG
Si vous obtenez une réponse vide, générez une clé GPG
gpg --generate-key
relancez la première commande, vous devriez obtenir un résultat comme:
sec rsa3072/95A854E0593B3214 2019-05-06 [SC] [expires: 2021-05-05]
AF2F7514568DC26B0EB97B9595A854E0593B74D8
uid [ultimate] yourname<your_email>
ssb rsa3072/EFD326E6C611117C 2019-05-06 [E] [expires: 2021-05-05]
définit la clé de chant git
git config --global user.singingkey 95A854E0593B3214
alors tu peux y aller! (--global est optionnel)
Alternativement, si vous ne vous dérange pas de signer avec votre clé ssh
git config commit.gpgsign false
notez que ceci n'est pas recommandé en raison d'un problème de sécurité selon cette question ici et ici
J'avais créé une clé git
avec 3 clés distinctes pour certify
/sign
/encrypt
& la clé indiquée comme étant arrivée à expiration dans le futur (après quelques jours de travail correct):
pub rsa4096/4CD1E9DA 2017-04-26 [C] [expired: 2017-04-28]
Key fingerprint = 4670 59C1 7592 08B8 7FA5 313B 2A42 B6A6 4CD1 E9DA
uid [ expired] Stuart Cardall (GIT Development Keys) <xxxxxx>
sub rsa4096/5195E715 2017-04-26 [E] [expired: 2019-04-26]
sub rsa4096/DB74C297 2017-04-26 [S] [expired: 2019-04-26]
sub rsa2048/A3913A3C 2017-04-28 [] [expired: never ]
créé une nouvelle clé sans ajouter de sous-clés séparées pour résoudre le problème.
Je l'utilise. Il prend en charge zsha et fonctionne sur le sous-système Windows pour Linux:
export GPG_TTY=$(tty)
J'ai résolu le problème en installant brew install gpg2
puis en faisant git config --global gpg.program gpg2