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.signingkey
la clave correcta y se volverá a firmar automáticamente. y tal vez desarmar el global congit config --global --unset user.signingkey
Respuestas:
Para la resolución de problemas, hay dos cosas que primero debe probar:
git config --global gpg.program gpg2
, para asegurarse de que git usagpg2
y nogpg
echo "test" | gpg2 --clearsign
, para asegurarse de quegpg2
funcionaSi todo parece estar bien, lo siguiente que debes intentar:
brew install pinentry
para 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 commit
y aún obtiene el "failed to sign the data
" error:gpgconf --kill gpg-agent
para matar a cualquier agente en ejecución que pueda estar colgadoSi eso dice que
gpgconf
no está instalado o no tiene una--kill
opción, puede intentar esto:cp ~/.gnupg ~/.gnupg-GOOD
para guardar una copia de su~/.gnupg
para volver más tarde si es necesariobrew install gnupg21
instalar GnuPG 2.1La razón para guardar una copia de su
~/.gnupg
directorio 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~/.bashrc
o˜/.bash_profile
fuente
gpg2 --gen-key
antes 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 false
para 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_profile
archivo y luego lo recargué consource ˜/.bash_profile
Git 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.gpgsign
funcionó 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),
git
funcionará 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-keys
para encontrar la identificación de clave adecuada (caracteres después\
depub
lí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
sub
muestran 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
save
en 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 gpg4win
Solució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-keys
fuente
Hice una
git
clave con 3 claves separadas paracertify
/sign
/encrypt
y 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 -s
en Debian GNU / Linux cuando he pasado depinentry-gnome3
apinentry-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 pinentry
Lo hice por mí. Estoy SSH'd en mi escritorio ypinentry
se 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-tty
hacer 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 cambiarpinentry
antes 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 gpg2
luego haciendogit config --global gpg.program gpg2
fuente
El mismo error también puede ser causado cuando ha expirado la clave en su configuración de git.
Verifique el contenido
cat .git/config
y busque elsigningkey
valor 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
signkey
de 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-suite
resuelve 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 commit
en una pequeñatmux
ventana que no pudo ajustarse a la solicitud de frase de contraseña.fuente
Esto te ayudará a deshacerte de él
git config commit.gpgsign false
fuente