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 .gitconfig
resultado 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 gpg
configuraciones 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 data
cada vez que lo uso-S
. En 2.8, puedo firmar un commit sin problema. No sé que pasa.user.signingkey
solucionó mi problema, por extraño que parezca.user.name
was! = 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
gpg
agpg1
, 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
gnupg2
labrew
ensuciado con enlaces simbólicos por lo tantogpg
se ha retirado, que tenía enlaces fijos utilizandobrew link --overwrite gnupg2
.gpg1
es el ejecutable aún exportado.killall gpg-agent && gpg-agent --daemon --use-standard-socket --pinentry-program /usr/local/bin/pinentry
finalmente 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.su
aroot
en un servidor remoto~/.zshrc
y puedo realizar confirmaciones nuevamente, ahora que se conecta correctamente al terminal. ¡Gracias por toda tu ayuda!Si todo falla, usa
GIT_TRACE=1
para probar y ver qué está haciendo realmente git:Ahora ejecute el comando de falla manualmente:
Resulta que mi llave expiró,
git
no tenía la culpa.fuente
.git/config
tenía unname
proyecto 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
signingkey
de esta manera .Ponga lo siguiente en el
gpg.conf
archivo (edite el archivo con elnano ~/.gnupg/gpg.conf
comando):Ponga lo siguiente en el
gpg-agent.conf
archivo (edite el archivo con elnano ~/.gnupg/gpg-agent.conf
comando):Actualización :
Es posible que deba ejecutar el
killall gpg-agent
comando 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-agent
despué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 gnupg
el uso que aprovecha el trabajo de gnupg.org .user.signingkey
conjunto 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-agent
que podría quedarse con los datos antiguos. Así que reciéngpg-agent
empezado pediría una contraseña.fuente
gpg-agent --daemon
para comenzarkillall gpg-agent
gpgconf --kill gpg-agent
Siga 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 --version
echo "test" | gpg --clearsign
si se muestra:
export GPG_TTY=$(tty)
4. Luego intente nuevamente
echo "test" | gpg --clearsign
en qué firma PGP se obtiene.git config -l | grep gpg
gpg.program = gpg commit.gpgsign = true
6.aplicar
git commit -S -m "commitMsz"
fuente
export GPG_TTY=$(tty)
Fue el truco. Agregué eso a mi.zshrc
archivoPara cualquiera que esté enfrentando este problema en máquinas MacOS , intente esto:
brew uninstall gpg
brew install gpg2
brew install pinentry-mac
(si es necesario)gpg --full-generate-key
Crea una clave usando un algoritmo.gpg --list-keys
git config --global user.signingkey <Key from your list>
git config --global gpg.program /usr/local/bin/gpg
git config --global commit.gpgsign true
gpg --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_profile
echo 'export GPG_TTY=$(tty)' >> ~/.profile
Si 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
.gitconfig
de archivos que en mi caso se encuentra en:/Users/gent/.gitconfig
Y 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 quepassphrase
en algún momento caduca ygpg
necesita 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 elgpg
mensaje para que ingrese su frase de contraseña (básicamente cuando daemonized no puede mostrarle el diálogo de entrada engpg-agent
stdin
).Una de las soluciones es
gpg --sign a_file.txt
ingresar la frase de contraseña que ingresó cuando creó su clave y luego todo debería estar bien (gpg-agent
deberí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 -p
Editar: haga una
man gpg-agent
lectura 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.c
Un registro en ese archivo revela el cambio reciente en commit af2b21e (Git 2.10)
Así que verifique cómo especificó su
user.signingkey
configuració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 data
mensaje 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.signingkey
configuració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
git
estaba comprobando. Es mejor copiar el valor pasado a-bsau
arriba en los registros tal como está y usar a continuación.Entonces se convierte,
Entonces funcionó.
Espero que ayude.
fuente
git trace
fue 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 --clearsign
ver 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 device
que puede solucionarseexport GPG_TTY=$(tty)
. Fuente: github.com/keybase/keybase-issues/issues/2798En OS X, usando
gnupg2
via brew solo tuve que matar al agente gpg , a veces sucede:Y establezca la
env
variable 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-agent
con:Esto hizo el truco para mí. Parece que también debe haber
user.signingkey
configurado su clave privada por lo que dicen otros comentarios.fuente
Podría ser un agente de gpg colgante.
Pruebe
gpgconf --kill gpg-agent
como 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 0
ykey 1
siguiendo estas instrucciones , que se reducía a escribirkey 0
a continuación,expire
y 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.0
sino 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.20
para 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 all
arregló 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
libreadline
estaba dando problemas a GnuPG:Y, por supuesto, tratar de obtener información útil de Git con
-vvv
falló, 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_TTY
configurado, intenté matar al agente, etc.). Elgpg
comando independiente estaba fallando con este error:Intenté ejecutar
gpg
con la--debug-all
opción y noté el siguiente resultado:Lo anterior indica que hay algún problema con el
pinentry
programa. Gpg normalmente funcionapinentry-curses
para mí, así que lo cambié apinentry-tty
(tuve queaptitude install
hacerlo 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-tty
a~/.gnupg/gpg-agent.conf
y 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
gpg
binario (/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
gpg
binario que sea el último disponible en brew". Entonces intenté:Verifiqué que había cambiado correctamente
gpg
sobre mi$PATH
para señalar el nuevo ejecutable de brew:Y también le dije explícitamente a git qué
gpg
binario 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 commit
firmar 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.app
y 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-suite
y 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