Seguí algunos artículos sobre los bonitos atributos en la nota de lanzamiento de Git 2.10 . Pasando por el cual actualizó el git a 2.10.0 e hizo cambios en el .gitconfigresultado global de la siguiente manera:
[filter "lfs"]
    clean = git-lfs clean %f
    smudge = git-lfs smudge %f
    required = true
[user]
    name = xyz
    email = [email protected]
    signingkey = AAAAAAA
[core]
    excludesfile = /Users/xyz/.gitignore_global
    editor = 'subl' --wait
[difftool "sourcetree"]
    cmd = opendiff \"$LOCAL\" \"$REMOTE\"
    path = 
[mergetool "sourcetree"]
    cmd = /Applications/SourceTree.app/Contents/Resources/opendiff-w.sh \"$LOCAL\" \"$REMOTE\" -ancestor \"$BASE\" -merge \"$MERGED\"
    trustExitCode = true
[alias]
    lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative
[color "diff"]
    old = red strike
    new = green italic
Pero ahora que trato de firmar mis confirmaciones usando
git commit -a -S -m "message"
Veo el siguiente error:
Necesita una frase de contraseña para desbloquear la clave secreta para
usuario: "XYZ (firmado digitalmente)"
Clave RSA de 2048 bits, ID AAAAAAAA, creada el 2016-07-01
error: gpg no pudo firmar los datos fatales: no se pudo escribir el objeto de confirmación
Nota : todavía puedo confirmar cambios usandogit commit -a -m "message"
¿Hay alguna manera de superar lo mismo? ¿O algún cambio requerido en las gpgconfiguraciones para llevarse bien con la actualización de git?
Actualización 1
También buscando mayor utilidad, siguiendo ¿Hay alguna manera de "auto firmar" confirmaciones en Git con una clave GPG? . Ya he configurado la clave usando
git config --global user.signingkey ED5CDE14(with my key) 
git config --global commit.gpgsign true
y obviamente obtenemos el mismo error de todos modos.
fuente

gpg failed to sign the datacada vez que lo uso-S. En 2.8, puedo firmar un commit sin problema. No sé que pasa.user.signingkeysolucionó mi problema, por extraño que parezca.user.namewas! = Nombre utilizado al crear la clave PGPRespuestas:
Me encontré con este problema con OSX.
Respuesta original:
Parece que una actualización de gpg (de brew) cambió a la ubicación de
gpgagpg1, puede cambiar el binario donde git busca el gpg:Si usted no tiene GPG1:
brew install gpg1.Respuesta actualizada:
Parece que gpg1 está en desuso / "fuera de uso suavemente" , por lo que probablemente debería actualizar a gpg2, desafortunadamente esto implica bastantes pasos más / un poco de tiempo:
La primera parte instala gpg2, y la última es un hack requerido para usarlo . Para la solución de problemas, consulte esta respuesta (aunque se trata de Linux no se prepara), sugiere una buena prueba:
Si esta prueba es exitosa (ningún error / resultado incluye la firma PGP), ha actualizado con éxito a la última versión de GPG.
¡Ahora debería poder volver a usar la firma git!
Vale la pena señalar que necesitarás tener:
Nota: Después de ejecutar una confirmación firmada, puede verificar que se haya firmado con:
que incluirá información de gpg para la última confirmación.
fuente
gnupg2labrewensuciado con enlaces simbólicos por lo tantogpgse ha retirado, que tenía enlaces fijos utilizandobrew link --overwrite gnupg2.gpg1es el ejecutable aún exportado.killall gpg-agent && gpg-agent --daemon --use-standard-socket --pinentry-program /usr/local/bin/pinentryfinalmente lo arregló para míSi se utilizan gnupg2 y gpg-agent 2.x, asegúrese de establecer la variable de entorno
GPG_TTY.Consulte la documentación de GPG sobre problemas comunes .
fuente
set -x GPG_TTY (tty)su perfil.suarooten un servidor remoto~/.zshrcy puedo realizar confirmaciones nuevamente, ahora que se conecta correctamente al terminal. ¡Gracias por toda tu ayuda!Si todo falla, usa
GIT_TRACE=1para probar y ver qué está haciendo realmente git:Ahora ejecute el comando de falla manualmente:
Resulta que mi llave expiró,
gitno tenía la culpa.fuente
.git/configtenía unnameproyecto especificado en un proyecto que no coincidía con mi correo electrónico de firma. Eso fue suficiente para rechazarlo.gpg -bsau <key>en mi máquina no ejecuta nada. ¿Se supone que esto tarda demasiado en ejecutarse? ¿O eso significa que la clave está bien para ser utilizada? @VonC alguna idea?Lo he hecho a través de esta receta corta y fácil :
Las confirmaciones de firma automática en macOS (globalmente y con diferentes IDE):
Consigue tu
signingkeyde esta manera .Ponga lo siguiente en el
gpg.confarchivo (edite el archivo con elnano ~/.gnupg/gpg.confcomando):Ponga lo siguiente en el
gpg-agent.confarchivo (edite el archivo con elnano ~/.gnupg/gpg-agent.confcomando):Actualización :
Es posible que deba ejecutar el
killall gpg-agentcomando después de editar el archivo de configuracionesgpg.conf, de acuerdo con los comentarios. Como dice el comando autoexplicativo, este comando terminará el agente GPG (Gnu Privacy Guard).fuente
killall gpg-agentdespués de configurar los archivos de configuración, ¡entonces funcionó!pinentry-mac? No digo que no podamos, pero la organización GPGTools está respaldada por un equipo muy pequeño y el repositorio solo tiene 5 colaboradores en comparación conbrew install gnupgel uso que aprovecha el trabajo de gnupg.org .user.signingkeyconjunto local no válido , que no noté en mi configuración de árbol de origen, ni en mi configuración global (porque no pensé en mirar la configuración local) Asegúrese de que ambos sean locales (git config --local --get user.signingkey) y global (git config --global --get user.signingkey) son iguales, o incluso mejores, desarman el local si no es válido (git config --local --unset user.signingkey)Puede ayudar a matar el proceso
gpg-agentque podría quedarse con los datos antiguos. Así que reciéngpg-agentempezado pediría una contraseña.fuente
gpg-agent --daemonpara comenzarkillall gpg-agentgpgconf --kill gpg-agentSiga la siguiente URL para configurar la confirmación firmada https://help.github.com/en/articles/telling-git-about-your-signing-key
si todavía obteniendo gpg no se pudo firmar la información fatal: no se pudo escribir el objeto commit
esto no es problema con git, esto es con GPG, siga los pasos a continuación
1)
gpg --versionecho "test" | gpg --clearsignsi se muestra:
export GPG_TTY=$(tty)4. Luego intente nuevamente
echo "test" | gpg --clearsignen qué firma PGP se obtiene.git config -l | grep gpggpg.program = gpg commit.gpgsign = true
6.aplicar
git commit -S -m "commitMsz"fuente
export GPG_TTY=$(tty)Fue el truco. Agregué eso a mi.zshrcarchivoPara cualquiera que esté enfrentando este problema en máquinas MacOS , intente esto:
brew uninstall gpgbrew install gpg2brew install pinentry-mac(si es necesario)gpg --full-generate-keyCrea una clave usando un algoritmo.gpg --list-keysgit config --global user.signingkey <Key from your list>git config --global gpg.program /usr/local/bin/gpggit config --global commit.gpgsign truegpg --armor --export <key>y agregue esta clave a GitHub en las claves GPG: https://github.com/settings/keys (con las líneas START y END incluidas)Si el problema persiste:
test -r ~/.bash_profile && echo 'export GPG_TTY=$(tty)' >> ~/.bash_profileecho 'export GPG_TTY=$(tty)' >> ~/.profileSi el problema persiste:
Instale https://gpgtools.org y firme la clave que utilizó presionando Firmar desde la barra de menú: Clave -> Firmar
Si el problema persiste:
Ir a: el mundial
.gitconfigde archivos que en mi caso se encuentra en:/Users/gent/.gitconfigY modificar el .gitconfig archivo (por favor asegúrese de correo electrónico y nombre son el mismo con el que se ha creado al generar la clave) :fuente
Mis dos centavos aquí:
Cuando crea y agrega una clave a gpg-agent, define algo llamado
passphrase. Ahora quepassphraseen algún momento caduca ygpgnecesita que lo ingrese nuevamente para desbloquear su clave y poder comenzar a firmar nuevamente.Cuando utiliza cualquier otro programa con el que interactúa
gpg, no aparece elgpgmensaje para que ingrese su frase de contraseña (básicamente cuando daemonized no puede mostrarle el diálogo de entrada engpg-agentstdin).Una de las soluciones es
gpg --sign a_file.txtingresar la frase de contraseña que ingresó cuando creó su clave y luego todo debería estar bien (gpg-agentdebería firmar automáticamente)Vea esta respuesta sobre cómo establecer tiempos de espera más largos para su frase de contraseña para que no tenga que hacer esto todo el tiempo.
O puede eliminar completamente la frase de contraseña con
ssh-keygen -pEditar: haga una
man gpg-agentlectura para algunas cosas sobre cómo hacer que lo anterior suceda automáticamente y agregue las líneas:en su .bashrc si está usando bash (esta es la respuesta correcta pero también mantengo mi línea de pensamiento anterior)
fuente
Actualización de octubre de 2016: el problema 871 mencionó "La firma dejó de funcionar en Git 2.9.3"
Git para Windows 2.10.1 lanzado hace dos días (4 de octubre de 2016) ha corregido la firma de GPG interactiva de confirmaciones y etiquetas.
Respuesta original:
Leyendo " 7.4 Herramientas Git - Firmando su trabajo ", supongo que tiene su "
user.signingkey" configuración establecida.La última gran refactorización (antes de Git 2.10) alrededor de gpg fue en commit 2f47eae2a , aquí ese mensaje de error se movió a
gpg-interface.cUn registro en ese archivo revela el cambio reciente en commit af2b21e (Git 2.10)
Así que verifique cómo especificó su
user.signingkeyconfiguración y la versión de gpg que está utilizando (gpg1 o gpg2), para ver si tienen algún efecto en el mensaje de error.También hay commit 0581b54 que cambia la condición para el
gpg failed to sign the datamensaje de error (en complemento de commit 0d2b664 ):Commit 4322353 muestra que gpg ahora usa un archivo temporal, por lo que podría haber problemas correctos al respecto.
fuente
user.signingkeyconfiguración configurada. También usandogpg (GnuPG) 2.0.3.El rastro git fue muy revelador para mi situación ...
Necesitaba generar una clave inicial por el formato que
gitestaba comprobando. Es mejor copiar el valor pasado a-bsauarriba en los registros tal como está y usar a continuación.Entonces se convierte,
Entonces funcionó.
Espero que ayude.
fuente
git tracefue realmente útil.Usando cygwin, recientemente cambié a
gpg2. Luego tuve el mismo problema para firmar con git después de la configuracióngit config gpg.program gpg2.Intenta
echo "test" | gpg2 --clearsignver si gpg2 está funcionando. Me pareció la solución más fácil de configurargit config gpg.program gpg, porque eso funciona. Pero también obtendrá un mejor error de esta manera, por ejemplo, que necesita instalar pinentry.fuente
gpg: signing failed: Inappropriate ioctl for deviceque puede solucionarseexport GPG_TTY=$(tty). Fuente: github.com/keybase/keybase-issues/issues/2798En OS X, usando
gnupg2via brew solo tuve que matar al agente gpg , a veces sucede:Y establezca la
envvariable si es necesario:Vea los problemas comunes de GPG también y esta respuesta aquí también.
fuente
alias fix-gpg='pkill -9 gpg-agent && export GPG_TTY=$(tty)'.He visto respuestas similares, pero nada exactamente como lo que funcionó para mí. En Linux, tuve que matar y reiniciar mi
gpg-agentcon:Esto hizo el truco para mí. Parece que también debe haber
user.signingkeyconfigurado su clave privada por lo que dicen otros comentarios.fuente
Podría ser un agente de gpg colgante.
Pruebe
gpgconf --kill gpg-agentcomo se discute aquífuente
Recibí este error en Ubuntu 18.04 y resultó que mi clave había caducado .
Para ver esto, ejecuté esto y confirmó que mis claves habían caducado:
Para corregir esto, ejecuté (usando la ID que se muestra en el comando anterior):
A partir de ahí, he ampliado la expiración
key 0ykey 1siguiendo estas instrucciones , que se reducía a escribirkey 0a continuación,expirey siguiendo las instrucciones. Luego repitiendo parakey 1.Después, para probar esto, corrí:
Y antes de la solución, falló con el error:
Pero después de la corrección, el mismo comando firmó con éxito el mensaje, ¡así que supe que las cosas estaban funcionando nuevamente!
fuente
Tuve el mismo problema. Me complace informar que el problema no radica en
git 2.10.0sino congnupg 1.4.21.La degradación temporal de gnupg a 1.4.20 solucionó el problema para mí.
Si está usando homebrew y actualizó sus paquetes como lo hice yo, probablemente pueda simplemente ejecutar
brew switch gnupg 1.4.20para volver atrás.fuente
Asegúrese de tener su correo electrónico configurado correctamente.
fuente
Si el correo electrónico asociado al uid de su clave GPG es diferente al correo electrónico que está utilizando en git, deberá agregar otra identificación de usuario a su clave O utilizar una clave que coincida exactamente con el correo electrónico.
Puede agregar otro UID usando:
Ver para más /superuser/293184/one-gnupg-pgp-key-pair-two-emails
fuente
Debo haber actualizado accidentalmente gpg de alguna manera porque obtuve esto después de intentar probar si gpg funciona:
Correr lo
gpgconf --kill allarregló para mí.Espero que esto ayude a alguien.
fuente
Tuve un problema similar con las últimas fuentes de Git (2.12.2) creadas junto con las últimas fuentes de todas sus dependencias (Zlib, Bzip, cURL, PCRE, ReadLine, IDN2, iConv, Unistring, etc.).
Resulta que le
libreadlineestaba dando problemas a GnuPG:Y, por supuesto, tratar de obtener información útil de Git con
-vvvfalló, por lo que el fracaso fue un misterio.Para resolver la falla de PGP debido a ReadLine, siga las instrucciones en No se puede actualizar o usar el administrador de paquetes - error de gpg :
fuente
Las respuestas anteriores son geniales, pero no me funcionaron. Lo que resolvió mi problema fue exportar tanto el público como el secreto claves .
enumerar las claves de la máquina desde donde estamos exportando
exportar las llaves
ir a la máquina que estamos importando e importar
bingo bongo, ya terminaste!
referencia: https://www.debuntu.org/how-to-importexport-gpg-key-pair/
PD. Mis claves se hicieron originalmente en Windows 7 bootcamp y las exporté a mi Mac Air (la misma máquina física, virtualmente diferente)
fuente
Estoy en Ubuntu 18.04 y recibí el mismo error, también estuve preocupado durante semanas. Finalmente me di cuenta de que gpg2 no apunta hacia nada. Así que simplemente corre
Y tada, funciona a las mil maravillas.
Sus confirmaciones ahora tendrán una etiqueta verificada con ellos.
fuente
Me topé con este error no por ningún problema de configuración, sino porque mi clave había caducado. La forma más fácil de extender su validez en OSX es abrir la aplicación GPG Keychain (si la tiene instalada) y automáticamente le solicitará que la extienda. Dos clics y listo. Esperemos que esto ayude a otros Googlers :)
fuente
Esto comenzó a suceder de repente para mí en Ubuntu, no estoy seguro de si alguna actualización reciente lo hizo, pero ninguno de los problemas existentes era aplicable para mí (lo había
GPG_TTYconfigurado, intenté matar al agente, etc.). Elgpgcomando independiente estaba fallando con este error:Intenté ejecutar
gpgcon la--debug-allopción y noté el siguiente resultado:Lo anterior indica que hay algún problema con el
pinentryprograma. Gpg normalmente funcionapinentry-cursespara mí, así que lo cambié apinentry-tty(tuve queaptitude installhacerlo primero) y el error desapareció (aunque ya no obtengo la contraseña de pantalla completa, pero de todos modos no me gusta). Para realizar este cambio, he tenido que añadir la líneapinentry-program /usr/bin/pinentry-ttya~/.gnupg/gpg-agent.confy matar al agentegpgconf --kill gpg-agent(que se reinicia la próxima vez).fuente
Ninguna de las respuestas anteriores parecía coincidir con mi problema. Mi
gpgbinario (/usr/local/bin/gpg -> /usr/local/MacGPG2/bin/gpg2) se instaló como parte de GPG Suite , en lugar de hacerlo por preparación.Sin embargo, sentí que el consejo se reducía a: "usar el
gpgbinario que sea el último disponible en brew". Entonces intenté:Verifiqué que había cambiado correctamente
gpgsobre mi$PATHpara señalar el nuevo ejecutable de brew:Y también le dije explícitamente a git qué
gpgbinario usar:Bueno, tal vez eso no sea completamente hermético, ya que es sensible al camino. En realidad, no fui tan lejos como para confirmar sin lugar a dudas que Git había cambiado a invocar la cerveza
gpg.En cualquier caso: nada de esto fue suficiente para hacer
git commitfirmar con éxito mis confirmaciones nuevamente.Lo que funcionó para mí en última instancia fue actualizar GPG Suite . Estaba ejecutando la versión 2016.7, y descubrí que la actualización a 2016.10 me solucionó el problema.
Abrí
GPG Keychain.appy presioné "Buscar actualizaciones ...". Con la nueva versión: los commits firmados volvieron a funcionar correctamente.fuente
lo configuró simplemente:
fuente
Al igual que @birchlabs, después de mucho cavar / buscar descubrí que no era GPG, sino GPG Suite. Lo hice
cask reinstall gpg-suitey lo resolvió por mí.fuente
Si esto sucedió al azar y ha funcionado perfectamente en el pasado, como es mi caso, intente cerrar sesión (
cmd+shift+q) y volver a iniciar sesión. Funcionó para mífuente
En mi caso, ninguna de las soluciones mencionadas en otra respuesta funcionó. Descubrí que el problema era específico de un repositorio. Eliminar y clonar el repositorio nuevamente resolvió el problema.
fuente
Un poco raro, ¡pero asegúrese de que su terminal sea lo suficientemente grande! Puede saber si es demasiado pequeño al ejecutarlo
echo test | gpg --clearsign; le dará un mensaje de error bastante obvio que le informará . Si no es lo suficientemente grande, su agente GPG no puede mostrar su pequeña caja ncurses.Este no se aplicará si usa un agente GUI o algo que no use ncurses.
fuente