Error de Git: gpg no pudo firmar datos

Empecé a usar git e instalé git y gpg a través de homebrew. Por alguna razón, me sale este error cuando hago git commit Mire tantas otras preguntas de stackoverflow con respecto a este tema y ninguna de ellas funcionó para mí. ¿Cómo puedo solucionar este error para poder uploadlo correctamente?

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

Para la resolución de problemas, dos cosas para probar primero:

  • ejecuta git config --global gpg.program gpg2 , para asegurarte de que git usa gpg2 y no gpg
  • ejecutar echo "test" | gpg2 --clearsign echo "test" | gpg2 --clearsign , para asegurarse de que gpg2 esté funcionando

Si todo se ve bien, una cosa a intentar:

  • ejecutar brew install pinentry para asegurarse de tener una buena herramienta instalada para la input de frase de contraseña

Si después de esa installation, vuelve a intentar la git commit y sigue obteniendo el error de "error failed to sign the data ":

  • ejecuta gpgconf --kill gpg-agent para matar a cualquier agente en ejecución que pueda estar colgado

Si eso dice que gpgconf no está instalado o no tiene una opción --kill , puede intentar esto:

  1. cp ~/.gnupg ~/.gnupg-GOOD para save una copy de su ~/.gnupg para volver a más adelante si es necesario
  2. brew install gnupg21 para instalar GnuPG 2.1

La razón para save una copy de su ~/.gnupg dir es que GnuPG 2.1 potencialmente crea / cambia algunos datos key de manera que no es compatible con versiones anteriores de GnuPG 2.0, por lo que si desea volver más tarde, puede do mv ~/.gnupg ~/.gnupg21 && mv ~/.gnupg-GOOD ~/.gnupg .


De lo contrario, hay algunos pasos básicos para ejecutar para comprobar que tienes un entorno GnuPG en funcionamiento:

  • ejecuta gpg2 -K --keyid-format SHORT , para verificar que tienes al less un par de keys

Si el resultado de eso muestra que no tiene una key secreta para usar GnuPG, entonces necesita crear una:

  • ejecuta gpg2 --gen-key , para que GnuPG te gpg2 --gen-key por los pasos para crear un par de keys

Git necesita saber con qué tecla está firmando.

Después de haber configurado los files GPG, gpg-agent y gpg.conf (consulte esta guía ), debe ejecutar

 git config --global user.signingkey EB11C755 

Obviamente, reemplace la key pública al final con la suya. Si desea que cada confirmación se firme de manera pnetworkingeterminada, use

 git config --global commit.gpgsign true 

De alguna manera, su git está configurado para firmar GPG cada confirmación. No es necesario firmar con GPG para comprometer o presionar usando git. Es probable que el error se deba a que su mecanismo de firma de gpg aún no está configurado.

Si eres nuevo en git, intenta hacerlo funcionar primero sin la firma de GPG al principio, luego agrega iniciar session más tarde si realmente lo necesitas.

Puedes verificar cómo se configura tu git con respecto a gpg haciendo:

 git config -l | grep gpg 

Que puede producir cero o más líneas, incluyendo:

 commit.gpgsign=true 

Si "commit.gpgsign" es verdadero, entonces tiene activada la firma gpg. Desactívelo con:

 git config --global --unset commit.gpgsign 

Luego intenta ejecutar tu commit nuevamente. Ahora debería ejecutarse sin firma gpg. Después de que funcione el git básico, entonces debe intentar agregar la firma gpg a la mezcla.

Consulte @sideshowbarker, y la solución @Xavier Ho, resolví mi problema mediante los siguientes pasos.

Supongamos que gpg2 está instalado por 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

seg. rsa2048 / 0A61C6FC 2017-06-29 [SC] [vence: 2019-06-29]

 git config --global user.signingkey 0A61C6FC 

Recordada por mi colega, necesito agregar

 export GPG_TTY=$(tty) 

a ~ / .zshrc si usa zsh, más añádelo a ~ / .bash_profile

Puede ser que su configuration de Git se haya configurado gpgsign = true . Intenta configurarlo en falso si no quieres asignar tus commits. Ve a tu carpeta de repository y cambia el file

nano .git / config

De esto…

 [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 esto…

 [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 

Experimenté este problema después de actualizar a gnupg 2.x. Se vería que gpg2 hace reference a las keys de manera diferente: todavía tenía signingkey = ABC98F11 (configuration de gpg v1) en mi ~/.gitconfig . Los identificadores key para gpg2 son más largos. gpg --list-secret-keys con gpg --list-secret-keys

Había creado una key git con 3 keys separadas para certify / sign / encrypt y la key mostraba que caducaba en el futuro (después de funcionar bien durante unos días):

 pub rsa4096/4CD1E9DA 2017-04-26 [C] [expinetworking: 2017-04-28] Key fingerprint = 4670 59C1 7592 08B8 7FA5 313B 2A42 B6A6 4CD1 E9DA uid [ expinetworking] Stuart Cardall (GIT Development Keys) <xxxxxx> sub rsa4096/5195E715 2017-04-26 [E] [expinetworking: 2019-04-26] sub rsa4096/DB74C297 2017-04-26 [S] [expinetworking: 2019-04-26] sub rsa2048/A3913A3C 2017-04-28 [] [expinetworking: never ] 

hizo una nueva key sin agregar subkeys separadas para resolver el problema.

Verifica que tu key esté vencida. Una vez que arregle la date de vencimiento (no es necesario crear una nueva key a less que lo desee), git funcionará normalmente.

Una forma de corregir la key caducada:

(Nota: $ representa la request de línea de command, escriba los commands después de la request, presione Entrar después de cada command)

$ gpg2 --list-keys para encontrar la identificación de la llave apropiada (caracteres después de \ en la línea de pub )

$ gpg2 --edit-key <key id> – esto abre el shell gpg, con el cambio de gpg>

gpg> expire : siga las instrucciones para establecer una nueva date de caducidad para la key principal

A continuación, si hay subkeys que han expirado ( sub muestra en la línea), restablezca también sus dates de caducidad:

gpg> key 1 – selecciona la primera subkey gpg> expire – sigue las instrucciones para establecer una nueva date de vencimiento para la subkey

Repita para cada subkey subsecuente, según sea necesario.

Este error también puede ocurrir cuando su llave GPG ha expirado. Generar una nueva key y agregarla a Git debería resolver esto.