Acabo de comenzar a usar git e instalo git y gpg a través de homebrew. Por alguna razón, recibo este error cuando lo git commit
hice, miré muchas otras preguntas de stackoverflow con respecto a este tema y ninguna de ellas funcionó para mí. ¿Cómo puedo solucionar este error para poder cargar correctamente?
error: gpg failed to sign the data
fatal: failed to write commit object

git config --local user.signingkeyla clave correcta y se volverá a firmar automáticamente. y tal vez desarmar el global congit config --global --unset user.signingkeyRespuestas:
Para la resolución de problemas, hay dos cosas que primero debe probar:
git config --global gpg.program gpg2, para asegurarse de que git usagpg2y nogpgecho "test" | gpg2 --clearsign, para asegurarse de quegpg2funcionaSi todo parece estar bien, lo siguiente que debes intentar:
brew install pinentrypara asegurarse de que tiene una buena herramienta instalada para la entrada de frase de contraseñaSi después de esa instalación, vuelve a intentarlo
git commity aún obtiene el "failed to sign the data" error:gpgconf --kill gpg-agentpara matar a cualquier agente en ejecución que pueda estar colgadoSi eso dice que
gpgconfno está instalado o no tiene una--killopción, puede intentar esto:cp ~/.gnupg ~/.gnupg-GOODpara guardar una copia de su~/.gnupgpara volver más tarde si es necesariobrew install gnupg21instalar GnuPG 2.1La razón para guardar una copia de su
~/.gnupgdirectorio es que GnuPG 2.1 potencialmente crea / cambia algunos datos clave de una manera que no es compatible con versiones anteriores de GnuPG 2.0 y anteriores, por lo que si desea volver más tarde, puede hacerlomv ~/.gnupg ~/.gnupg21 && mv ~/.gnupg-GOOD ~/.gnupg.De lo contrario, hay algunos pasos básicos que debe ejecutar para verificar que tenga un entorno GnuPG que funcione:
gpg2 -K --keyid-format SHORT, para comprobar que tiene al menos un par de clavesSi el resultado de eso muestra que no tiene una clave secreta para GnuPG, entonces necesita crear una:
gpg2 --gen-key, para que GnuPG lo guíe a través de los pasos para crear un par de clavesSi recibe un mensaje de error que dice "ioctl inadecuado para el dispositivo" , haga lo siguiente:
export GPG_TTY=$(tty)y / o agregar eso a su~/.bashrco˜/.bash_profilefuente
gpg2 --gen-keyantes has corrido , eso es lo que debes hacer primero.export GPG_TTY=$(tty). En cuanto a si hay una manera de usar git sin gpg, debería poder hacerlo de manera predeterminada o simplemente ejecutandogit config --global commit.gpgsign falsepara firmar globalmente gpg de sus confirmaciones.echo "test" | gpg2 --clearsign, encontré un error y me llevó a este hilo , que resolvió mi problema: simplemente puse un archivoexport GPG_TTY=$(tty)en mi˜/.bash_profilearchivo y luego lo recargué consource ˜/.bash_profileGit necesita saber con qué clave está firmando.
Después de configurar GPG, gpg-agent y sus archivos gpg.conf (consulte esta guía ), debe ejecutar
Obviamente, reemplace la clave pública al final con la suya. Si desea que cada confirmación se firme de forma predeterminada, use
fuente
De alguna manera, su git está configurado para GPG firmar cada confirmación. No es necesario firmar con GPG para confirmar o enviar usando git. Es probable que esté dando el error porque su mecanismo de firma gpg aún no está configurado.
Si es nuevo en git, intente que funcione primero sin GPG al principio, luego agregue el inicio de sesión más tarde si realmente lo necesita.
Puede verificar cómo está configurado su git con respecto a gpg haciendo:
Que puede producir cero o más líneas, que incluyen:
Si "commit.gpgsign" es verdadero, entonces tiene habilitada la firma gpg. Desactívelo con:
Luego intente ejecutar su confirmación nuevamente. Ahora debería ejecutarse sin firmar gpg. Después de que funcione el git básico, debería intentar agregar la firma gpg nuevamente a la mezcla.
fuente
git config --global --unset commit.gpgsignfuncionó para mí :)Consulte @sideshowbarker y @Xavier Ho, resolví mi problema siguiendo los pasos.
Supongamos que gpg2 instalado por brew,
Recordado por mi colega, necesito agregar
a ~ / .zshrc si usa zsh, de lo contrario agregue a ~ / .bash_profile
Para macOS,
el gpg2 se combina con gpg en brew y, por lo tanto, el comando gpg apunta a gpg2
y hay pinentry-mac para la entrada de frase de contraseña
Añadir línea
Recordado por mi colega, necesito agregar
a ~ / .zshrc si usa zsh, de lo contrario agregue a ~ / .bash_profile
fuente
Lo estoy usando. Tiene soporte para zsha y funciona en Windows Subsystem para Linux:
fuente
Verifique que su clave caduque. Una vez que arregle la fecha de vencimiento (no es necesario crear una nueva clave a menos que lo desee),
gitfuncionará normalmente.Una forma de arreglar la clave caducada:
(Nota:
$representa la línea de comando, escriba los comandos después de la línea de comando; presione Entrar después de cada comando)$ gpg2 --list-keyspara encontrar la identificación de clave adecuada (caracteres después\depublínea)$ gpg2 --edit-key <key id>- esto abre el shell gpg, con el aviso cambiado agpg>gpg> expire- siga las instrucciones para establecer una nueva fecha de vencimiento para la clave primariaA continuación, si hay subclaves que están vencidas (se
submuestran en la línea), restablezca también sus fechas de vencimiento:gpg> key 1- selecciona la primera subclavegpg> expire- sigue las instrucciones para establecer una nueva fecha de vencimiento para la subclaveRepita para cada subclave posterior, según sea necesario.
fuente
saveen el indicador de gpg cuando hayas terminado!Esto funcionó para mí en ubuntu 18.04
Comprueba tu clave gpg
si obtiene una respuesta en blanco, genere una clave GPG
vuelva a ejecutar el primer comando, debería obtener una salida como:
establecer clave de canto git
¡Entonces, ya puedes irte! (--global es opcional)
Alternativamente, si no le importa firmar con su clave ssh
tenga en cuenta que esto no se recomienda debido a un problema de seguridad de acuerdo con esta pregunta aquí y aquí
fuente
Tuve que arreglar el gpg.program a la ruta absoluta a gpg:
Estoy usando Windows con cygwin.
fuente
choco install gpg4winSolución:
Fuente
fuente
Este error también puede ocurrir cuando su clave GPG ha caducado. Generar una nueva clave y agregarla a Git debería resolver esto.
fuente
Experimenté este problema después de actualizar a gnupg 2.x. Se vería que gpg2 hace referencia a claves de manera diferente: todavía tenía
signingkey = ABC98F11(configuración de gpg v1) en mi~/.gitconfig. Los identificadores clave para gpg2 son más largos. Míralos congpg --list-secret-keysfuente
Hice una
gitclave con 3 claves separadas paracertify/sign/encrypty la clave se mostró expirada en el futuro (después de trabajar bien durante unos días):creó una nueva clave sin agregar subclaves separadas para resolver el problema.
fuente
Puede ser que su configuración de Git se haya configurado gpgsign = true . Intenta establecerlo en falso si no quieres asignar tus commits. Vaya a su carpeta de repositorio y cambie el archivo
De esto...
A esto...
fuente
Para mí comenzó a ocurrir con este error
git tag -sen Debian GNU / Linux cuando he pasado depinentry-gnome3apinentry-curses(usandoupdate-alternatives --config pinentry) para el acceso remoto más fácil. Solo ocurrió congit tag -s, no congpg(por ejemplogpg --clearsign) sí mismo.El único cambio necesario para que funcione nuevamente en este caso fue agregar
export GPG_TTY=$(tty)a mis archivos de inicio de shell.Sin embargo, no recibí el mensaje de error "Inactivo apropiado para el dispositivo" mencionado como indicador de esta solución en otra respuesta a esta pregunta.
Nota: Dado que la causa de obtener este error fue completamente diferente a la de aquellos que sugirieron
export GPG_TTY=$(tty)antes (generalmente como una sugerencia) en otras respuestas a esta pregunta, decidí que esta pregunta necesita otra respuesta que mencione queexport GPG_TTY=$(tty)puede ser la solución principal y única cosa necesaria en algunos casos.fuente
update-alternatives --config pinentryLo hice por mí. Estoy SSH'd en mi escritorio ypinentryse configuró en/usr/bin/pinentry-gnome3(que debería tener un respaldo TTY cuando SSH'd o cuando se cambia a una consola virtual). Pero no estaba funcionando, aparentemente. Establecer el valor predeterminado para/usr/bin/pinentry-ttyhacer el truco para mí. Puede que tenga que volver a configurarlo cuando vuelva a mi escritorio, pero, por ahora, estoy bien.export GPG_TTY=$(tty)no fue suficiente. Lo hice pero necesitaba cambiarpinentryantes de poder firmar mi confirmación.Lo que me resolvió fue asegurarme de que el nombre de la clave coincidiera con mi nombre de usuario git. Supongo que los correos electrónicos también deben coincidir. Esto podría tener que ver conmigo usando GPG KeyChain en mi Mac. No estoy seguro.
Pensé que estaba nombrando la clave cuando llené esto, pero supongo que estaba pidiendo mi nombre (nombre de usuario git).
fuente
Tuve este error en macos: para intentar solucionar los problemas, intenté enumerar las claves para ver si habían expirado usando
gpg2 --list-keys. Verifiqué que las claves no habían expirado y que la clave correcta se configuró en mi configuración usandogit config --global user.signingkey.Después de ejecutar esos comandos, de repente pude hacer confirmaciones firmadas nuevamente sin problemas. No cambié mis archivos de configuración o claves, ni siquiera creé una nueva instancia de Terminal. Simplemente parecía que el gpg2 estaba de alguna manera en un estado extraño en mi mac.
fuente
Resolví el problema instalando y
brew install gpg2luego haciendogit config --global gpg.program gpg2fuente
El mismo error también puede ser causado cuando ha expirado la clave en su configuración de git.
Verifique el contenido
cat .git/configy busque elsigningkeyvalor y verifique si está vencido. En caso afirmativo, actualícelo con el nuevo.fuente
Si está utilizando una tarjeta inteligente / yubikey para almacenar su clave GPG y configura el
signkeyde git mediante la clave almacenada en la tarjeta (y toda la respuesta anterior parece no resolver su problema), su PIN bloqueado de la tarjeta podría ser el causa raíz de este problema.Para verificar el PIN bloqueado:
Si el contador es similar a
Entonces su PIN está bloqueado (después de 3 intentos fallidos).
Para desbloquear el PIN:
fuente
Para mi un simple
brew unintstall gnupg && brew cask reinstall gpg-suiteresuelve el problema.Desinstala (en mi caso) manualmente el gpg instalado en homebrew y reinstala todo el GPG Suite.
fuente
En mi caso, tenía una configuración mixta de gpg y smimesign en la documentación de firma de compromiso aquí: https://help.github.com/en/github/authenticating-to-github/telling-git-about-your-signing- llave
Después de trabajar en ello durante horas, descubrí que la mejor manera de corregirlo era desarmar todo lo relacionado con gpg y reconfigurar gpg.
Como se menciona en la respuesta de @Jason Thrasher, encuentre toda la configuración de git relacionada con gpg usando:
Luego, desarme todo de forma golabial y local usando:
Luego reconfigure siguiendo la documentación oficial dada anteriormente. Espero que esto ayude.
fuente
Si ya tenía configurada su pinentry y gpg, y dejó de funcionar de la nada:
Comprueba si tu gpg funciona:
Si dice
gpg: signing failed: No pinentry, simplemente reinicie el cliente gpg daemon, que se atasca de vez en cuando:Ahora debería estar funcionando:
fuente
En mi caso, este error ocurrió cuando se ejecutó
git commiten una pequeñatmuxventana que no pudo ajustarse a la solicitud de frase de contraseña.fuente
Esto te ayudará a deshacerte de él
git config commit.gpgsign falsefuente