Aller au contenu
ecdsa.com
Git (commit -S, tag -s, commit.gpgsign) with GnuPGGit

Message d’erreur

error: gpg failed to sign the data

Également affiché sous la forme

  • fatal: failed to write commit object
  • gpg: skipped "ABCDEF0123456789": No secret key
  • gpg: signing failed: No secret key

Git affiche la sortie stderr de gpg après la première ligne, par exemple « gpg: skipped "<key>": No secret key » ou « gpg: signing failed: Inappropriate ioctl for device ». Lorsque `gpg.program` ne peut pas être lancé, Git affiche « (no gpg output) ».

Ce que cela signifie

Git a demandé à GnuPG de signer l’objet commit ou tag, et gpg s’est terminé avec une erreur : Git a donc abandonné (« fatal: failed to write commit object »). La ligne de Git elle-même ne dit rien de la cause ; ce sont les lignes de gpg affichées avec elle (ou les lignes d’état `[GNUPG:]`) qui la donnent. La cause la plus courante est « No secret key » : la clé configurée dans `user.signingkey` n’existe pas dans ce trousseau.

Pourquoi cela se produit

Comment corriger l’erreur

  1. 1.

    Lancer gpg vous-même avec la clé configurée

    Si `gpg --clearsign` échoue avec la même clé, le problème vient de GnuPG et non de Git – et c’est son message qui donne la véritable erreur.

    bash
    git config --get user.signingkey
    gpg --list-secret-keys --keyid-format=long          # is that key listed, with a "sec" line?
    echo test | gpg --clearsign --local-user "$(git config --get user.signingkey)" > /dev/null && echo "gpg can sign"
  2. 2.

    Indiquer à Git une clé existante et faire fonctionner pinentry

    Utilisez l’identifiant de clé long ou l’empreinte d’une clé secrète présente localement, définissez `gpg.program` explicitement et exportez `GPG_TTY` dans votre shell.

    bash
    KEY=$(gpg --list-secret-keys --with-colons alice@example.com | awk -F: '/^sec/ {print $5; exit}')
    git config --global user.signingkey "$KEY"
    git config --global gpg.program "$(command -v gpg)"
    export GPG_TTY=$(tty)        # in ~/.bashrc / ~/.zshrc, so pinentry can ask for the passphrase

Erreurs associées

Parcourir toute la base de données des erreurs de signature