Error de firma de confirmación de git: clave secreta no disponible

84

Recibo este error cuando intento comprometerme con Git.

gpg: skipped "name <[email protected]>": secret key not available
gpg: signing failed: secret key not available
error: gpg failed to sign the data
fatal: failed to write commit object

He generado una nueva clave como se muestra a continuación, pero todavía da el mismo error

gpg --list-keys
~/.gnupg/pubring.gpg
--------------------------------
pub   2048R/35F5FFB2 2016-04-23
uid                  name (New key) <[email protected]>
sub   2048R/112A8C2D 2016-04-23

La clave secreta es la misma que la anterior

Encontré esto Generando una clave GPG para el etiquetado de git y seguí los pasos, pero todavía no funciona, ¿alguna idea?

Emilio Menéndez
fuente
3
Para los usuarios de Windows, es mucho más probable encontrar este error porque Git en Windows no usa el gpg correcto. Al no encontrar el binario correcto en PATH, git recurre al uso de gpg empaquetado internamente dentro de su MSYS minificado, que no tiene conocimiento de dónde están sus claves. La configuración de las variables gpg.program o G (NU) PGHOME lo resolvería, como se especifica en algunas de las respuestas a continuación.
Abel Cheung

Respuestas:

78

Debe configurar la clave secreta antes de usarla.

git config user.signingkey 35F5FFB2

O declararlo globalmente si desea utilizar la misma clave para cada repositorio.

git config --global user.signingkey 35F5FFB2

Fuente: Herramientas de Git: firma de su trabajo

Leonardo Emanuel Alifraco
fuente
¡Muchas gracias Leonardo! ¡¡Funciona!! Perdón si la pregunta fue tonta, no tenía idea de cómo resolverla.
Emilio Menéndez
¡Excelente! Especificar la clave de firma del usuario también evitará tener varias direcciones de correo electrónico en una clave y una discrepancia entre el correo electrónico de git y la primera dirección de la clave.
user2943160
1
¿Es seguro almacenar .gitconfig con clave secreta en un repositorio público?
melihovv
1
para el registro como @melihovv preguntó acerca de: - La clave secreta debe estar en su anillo de claves GPG. Solo el ID de hash de esa clave se almacena en el archivo config.
BRPocock
2
Tenía que hacer esto junto con git config --global gpg.program gpg2.
Splaktar
108

Esto funcionó para mí en Windows 10 (tenga en cuenta que uso la ruta absoluta a gpg.exe):

git config --global gpg.program "C:\Program Files (x86)\GnuPG\bin\gpg.exe"

Este fue el error que obtuve antes de la solución:

gpg: skipped "3E81C*******": secret key not available
gpg: signing failed: secret key not available
error: gpg failed to sign the data
fatal: failed to write commit object
Wakeel
fuente
2
Obtuve este error secret key not availablecon VS Code y la gpg.exeubicación de configuración lo resolvió.
Dawid
2
Esto funcionó para mí también. Especialmente después de seguir los pasos de configuración de github .
Bas G
1
Cada vez que se instala mi compilación de Windows Insider, esta opción se restablece. Gracias por esto :)
VRG
Esto también funcionó para mí después de agregar la ruta absoluta de gpg. Muchas gracias.
Adarsh ​​Srivastava
64

Lo que funcionó para mí fue agregar

git config --global gpg.program "C:/Program Files (x86)/GNU/GnuPG/gpg2.exe"

Si desea encontrar la ruta completa de gpg2.exe:

where gpg2.exe
paul van bladel
fuente
3
Dependiendo de la versión instalada de GnuPG, debe hacer esto para en gpg.exelugar de gpg2.exe.
Mark Rotteveel
14

Me gustaría completar todas estas respuestas, porque tengo muchos problemas con esto.

Estos ejemplos usan la --globalbandera, pero puede eliminarla si desea estas cosas localmente.

Configurar la clave secreta en git

git config --global user.signingkey 35F5FFB2

Configurar el programa brujo gpg que usará en git (opcional)

Algunos sistemas (Ubuntu por ejemplo) pueden tener gpgy gpg2al mismo tiempo. Necesita especificar que usarágpg2

git config --global gpg.program gpg2

Exportar GPG_TTY (opcional)

Es posible que si usa estos comandos en un entorno ssh tenga el siguiente error: Inappropriate ioctl for deviceo gpg: échec de la signature : Ioctl() inapproprié pour un périphérique. Esto se puede solucionar mediante:

export GPG_TTY=$(tty)

Habilitar automáticamente el canto GPG (opcional)

git config --global commit.gpgsign true
alphayax
fuente
¿Cómo se desactiva si ya no se quiere usar?
Madona Syombua
1
Puede agregar la --unsetbandera en esos git configcomandos para deshabilitarlo
alphayax
De hecho, utilicé esta configuración de git --global commit.gpgsign true pero dije false.
Madona Syombua
7

Tuve una situación en la que me estaba pasando lo mismo en una máquina con Windows 10.

$ git commit -m "Improve logging, imports and show time executed"
gpg: signing failed: Operation cancelled
gpg: signing failed: Operation cancelled
error: gpg failed to sign the data
fatal: failed to write commit object

Los comandos "C:\Program Files (x86)\GnuPG\bin\gpg.exe" --list-secret-keys --keyid-format LONGy gpg --list-secret-keys --keyid-format LONGdonde me dan resultados completos diferentes!

$ where gpg
C:\Program Files\Git\usr\bin\gpg.exe
C:\Program Files (x86)\GnuPG\bin\gpg.exe

La razón principal estaba relacionada con respuestas anteriores pero en un sentido diferente:

  • Estaba creando las claves gpg usando la versión git (ruta configurada) de GPG
  • Git se configuró para usar la versión descargada de gpg para la confirmación.
  • Parece que las implementaciones de GPG usan su propia base de datos y almacenamiento de certificados.

Espero que esto pueda ayudar a cualquiera que se tropiece con este mensaje y las respuestas anteriores no resuelvan el problema.

will824
fuente
Tuve que agregar la clave secreta a kleopatra desde la exportación de cli, ya que la comunidad de Visual Studio parece usarla de forma predeterminada para firmar, mientras que git cli usó una lista / implementación diferente y, por lo tanto, todavía funcionó sin kleopatra.
Nithish
5

Tienes que configurar la variable GNUPGHOME. Sin él, GnuPG no puede encontrar sus claves.

# On unix add it to your path

# On windows it will usually be under: 
<drive>:\Users\<username>\AppData\Roaming\gnupg

En Unix, simplemente lo agrega a la ruta.
En Windows, debe abrir el panel de control y configurarlo como

System Variable
  Name: GNUPGHOME
  Path: <drive>:\Users\<username>\AppData\Roaming\gnupg
CodeWizard
fuente
1
Para mí no lo fue GNUPGHOME. Con GPGHOMEeso funciona para mí
Sysix
1

Tuve el mismo problema porque el nombre de git y la tienda de correo electrónico en .gitconfig eran diferentes a los de la clave gpg proporcionada. Los cambié para que coincidieran y empezó a funcionar.

Patricio perpetua
fuente
0

Usar "C:\Program Files\Git\usr\bin\gpg.exe"fue la solución para mí.
Tuve que desinstalar kleopatra. Con él, no estaba funcionando.

Entonces, resumiendo;

  • No se necesita kleopatra, use GIT predeterminado en su lugar.

  • git config --global user.signingkey Y0URK3Y
    git config --global commit.gpgsign true
    git config --global gpg.program "C:\Program Files\Git\usr\bin\gpg.exe"
    
António Almeida
fuente
-4

Tal vez necesite clonar su propio repositorio donde tenga derechos. Tuve este problema cuando cloné el repositorio de otra persona.

usuario6671429
fuente