374 votes

Erreur Git - gpg n'a pas réussi à signer les données

Je viens de commencer à utiliser git et j'installe git et gpg via homebrew. Pour une raison quelconque, j'obtiens cette erreur quand je fais git commit J'ai regardé de nombreuses autres questions sur stackoverflow concernant ce sujet et aucune n'a fonctionné pour moi. Comment puis-je corriger cette erreur afin de pouvoir télécharger avec succès.

error: gpg failed to sign the data
fatal: failed to write commit object

7 votes

Pour les utilisateurs de Mac. J'ai eu ce problème. Les conseils de cette page m'ont permis de réaliser que j'avais peut-être deux versions de gpg installées et c'est le cas. Une de Brew et une de GPG Suite. Je voulais utiliser la version de GPG Suite car elle permet de mettre en cache la phrase de passe dans le trousseau du système. La désinstallation de la version de brew a résolu mes problèmes. Ainsi que la réponse de @sideshowbarker concernant la suppression de gpg-agent. Je suppose donc que les configurations de chacun interféraient les unes avec les autres.

2 votes

0 votes

531voto

sideshowbarker Points 29042

Pour le dépannage, deux choses à essayer d'abord :

  • exécuter git config --global gpg.program gpg2 pour s'assurer que git utilise gpg2 et non gpg
  • exécuter echo "test" | gpg2 --clearsign pour s'assurer gpg2 lui-même travaille

Si tout semble correct, une prochaine chose à essayer :

  • exécuter brew install pinentry pour s'assurer que vous avez un bon outil installé pour la saisie de la phrase de passe

Si après cette installation et que vous réessayez git commit et vous obtenez toujours le " failed to sign the data " erreur :

  • exécuter gpgconf --kill gpg-agent pour tuer tout agent en cours d'exécution qui pourrait être suspendu

Si cela dit gpgconf n'est pas installé ou ne dispose pas d'une --kill option, vous pourrait Essayez ceci :

  1. cp ~/.gnupg ~/.gnupg-GOOD pour sauvegarder une copie de votre ~/.gnupg pour y revenir plus tard si nécessaire
  2. brew install gnupg21 pour installer GnuPG 2.1

La raison de sauvegarder une copie de votre ~/.gnupg dir 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 antérieures, donc si si vous voulez revenir en arrière plus tard, vous pouvez le faire mv ~/.gnupg ~/.gnupg21 && mv ~/.gnupg-GOOD ~/.gnupg .


Sinon, il y a quelques étapes de base à exécuter pour vérifier que vous avez un environnement GnuPG fonctionnel :

  • exécuter gpg2 -K --keyid-format SHORT pour vérifier que vous avez au moins une paire de clés.

Si le résultat montre que vous n'avez pas de clé secrète à utiliser par GnuPG, vous devez en créer une :

  • exécuter gpg2 --gen-key pour que GnuPG vous guide à travers les étapes de la création d'une paire de clés.

Si vous obtenez un message d'erreur disant "ioctl inapproprié pour le dispositif" faites ça :

  • exécuter export GPG_TTY=$(tty) et/ou l'ajouter à votre ~/.bashrc o ˜/.bash_profile

0 votes

J'obtiens cette erreur lorsque j'exécute la deuxième commande : gpg : no default secret key : Pas de clé secrète gpg : [stdin] : clearsign failed : Pas de clé secrète

0 votes

@Entitize Cela semble indiquer que gpg pense que vous n'avez pas de clés à utiliser pour la signature. Voyez les étapes supplémentaires que j'ai ajoutées à la réponse ; si vous n'avez jamais exécuté la commande gpg2 --gen-key avant, c'est ce que vous devez faire en premier.

0 votes

Quand je lance cette commande, cela me donne : gpg : Sorry, no terminal at all requested - can't get input. MISE À JOUR : J'ai supprimé no-tty de ~/.gnupg/gpg.conf et il semble que cela fonctionne. Je vous tiendrai au courant si cela fonctionne ou non.

175voto

Xavier Ho Points 4631

Git a besoin de savoir avec quelle clé il signe.

Après avoir configuré GPG, gpg-agent, et vos fichiers gpg.conf (cf. 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

$ gpg2 -K --keyid-format SHORT          # <-- Shows your keys, e.g.:
/home/<username>/.gnupg/pubring.kbx
-------------------------------
sec   rsa4096/0754B01E 2019-02-02 [SCA]             <--secret key
      C396BF3771782D7691B0641145E11B080754B01E
uid         [ultimate] John Doe <user@domain.com>
ssb   rsa4096/A20AB8EC 2019-02-02 [E]               <--public key

sec   rsa4096/25C504D5 2019-02-02 [SCA] [revoked: 2020-06-01]
      08BFF49B9E07E4B4B0C4946B645B6C1425C504D5
uid         [ revoked] John Doe <user2@domain.com>
uid         [ revoked] [jpeg image of size 2670]

A20AB8EC est l'ID de la clé que vous recherchez dans cet exemple.

13 votes

Je viens de tomber sur ça au cas où quelqu'un d'autre serait assez fou pour faire ce que j'ai fait : Assurez-vous que vous l'épelez "signingkey" et non "signinkey".

1 votes

Littéralement ce commentaire de @ZNK l'a fait pour moi. Je l'avais épelé "signkey" au lieu de "signingkey".

3 votes

La réponse acceptée devrait citer cela comme la première étape de dépannage, car parfois vous avez déjà toutes vos clés en place, c'est juste que git oublie quelle clé utiliser.

72voto

Jason Thrasher Points 398

D'une manière ou d'une autre, votre git est configuré pour signer GPG à chaque livraison. La signature avec GPG n'est pas nécessaire pour commiter ou pousser avec git. L'erreur est probablement due au fait que votre mécanisme de signature GPG n'est pas encore configuré.

Si vous êtes novice en matière de git, essayez d'abord de le faire fonctionner sans signature GPG, puis ajoutez la signature plus tard si vous en avez vraiment besoin.

Vous pouvez vérifier comment votre git est configuré par rapport à gpg en faisant :

git config -l | grep gpg

Ce qui peut produire zéro ou plusieurs lignes, y compris :

commit.gpgsign=true

Si "commit.gpgsign" est vrai, alors vous avez activé la signature gpg. Désactivez-la avec :

git config --global --unset commit.gpgsign

Puis essayez à nouveau d'exécuter votre commit. Il devrait maintenant s'exécuter sans la signature gpg. Après avoir fait fonctionner le git de base, vous devriez essayer de rajouter la signature gpg dans le mélange.

14 votes

Génial ! git config --global --unset commit.gpgsign Cela a marché pour moi :)

0 votes

Wow ! !! ça a marché pour moi : git config --global --unset commit.gpgsign

0 votes

Cela fonctionne, car il n'y a plus de fonctionnalité pour la signature gpg, donc je vote pour.

57voto

V-SHY Points 2444

En me référant à la solution de @sideshowbarker, et @Xavier Ho, j'ai résolu mon problème en suivant les étapes suivantes.

Supposons que gpg2 soit installé par brew,

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)

dans ~/.zshrc si vous utilisez zsh, sinon ajouter à ~/.bash_profile


Pour macOS,

le gpg2 est combiné avec le gpg dans brew et donc la commande gpg est dirigée vers gpg2

brew install gpg2

brew info gpg

gnupg : stable 2.2.6 (mis 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 de passe

brew install pinentry-mac
vim ~/.gnupg/gpg-agent.conf

Ajouter une ligne

pinentry-program /usr/local/bin/pinentry-mac

Rappelé par mon collègue, besoin d'annexer

export GPG_TTY=$(tty)

dans ~/.zshrc si vous utilisez zsh, sinon ajouter à ~/.bash_profile

3 votes

MacOS 10.15 (Catalina) est livré avec GnuPG version 2.2.17. Il n'est donc pas nécessaire de l'installer séparément, à moins que vous ne prévoyiez de gérer vous-même les mises à jour.

0 votes

Pour les utilisateurs de macOS : n'hésitez pas à créer le fichier ~/.gnupg/gpg-agent.conf s'il n'existe pas.

0 votes

Ce paramètre export GPG_TTY=$(tty) aidé pour Windows 10 Ubuntu WSL également

0voto

Il se peut que votre configuration Git ait été définie gpgsign = true . Essayez de le mettre à false si vous ne voulez pas signer vos commits. Allez dans le dossier de votre dépôt et changez le fichier

nano .git/config

De ce...

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[remote "origin"]
    url = git@bitbucket.org:yourrepo/project.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master
[user]
    signingkey = <GPG-KEY>
[commit]
    gpgsign = true

A ce...

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[remote "origin"]
    url = git@bitbucket.org:yourrepo/project.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master
[user]
    signingkey = <GPG-KEY>
[commit]
    gpgsign = false

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X