Skip to main content

Solución de problemas de la comprobación de GPG para GitHub Codespaces

En este artículo se proporcionan consejos para solucionar problemas de errores relacionados con la firma de las confirmaciones en los espacios de código.

Si habilitas la comprobación de GPG, GitHub Codespaces firma automáticamente las confirmaciones en los espacios de código creados a partir de repositorios seleccionados. Para más información, consulta: "Administración de la comprobación de GPG para GitHub Codespaces."

Una vez habilites la comprobación de GPG, surtirá efecto automáticamente en los nuevos espacios de código que crees a partir de los repositorios pertinentes. Para que la comprobación de GPG surta efecto en un espacio de código activo existente, deberás detener y reiniciar el espacio de código. Para más información, consulta: "Detención e inicio de un espacio de código."

Si GitHub Codespaces no puede firmar una confirmación, es posible que veas un error similar al siguiente.

$ git commit -m 'Initial commit'
error: gpg failed to sign the data
fatal: failed to write commit object

Puede encontrar este error si:

  • Has deshabilitado la comprobación de GPG e intentas realizar una confirmación normal sin firmar en un espacio de código existente.
  • Has habilitado la comprobación de GPG, pero has reemplazado la configuración de Git necesaria para que los datos GitHub Codespaces firmen las confirmaciones, por ejemplo, al vincular GitHub Codespaces con un repositorio de dotfiles que contiene archivos de configuración de Git.

Errores después de deshabilitar la comprobación de GPG

Al habilitar la comprobación de GPG, GitHub Codespaces firma todas las confirmaciones que realices en los espacios de código de forma predeterminada. Esto ocurre al establecer el commit.gpgsign valor de configuración de Git a true.

Si ha deshabilitado la comprobación de GPG y está trabajando en un espacio de código existente, este valor seguirá estando establecido en true. Esto significa que GitHub Codespaces intentará firmar las confirmaciones, pero no podrá hacerlo, ya que has deshabilitado la configuración de comprobación de GPG.

Para seguir realizando confirmaciones normales sin firmar en el espacio de código, restablece commit.gpgsign al valor predeterminado de false al escribir el siguiente comando en el terminal.

Shell
git config --unset commit.gpgsign

Para comprobar que el valor se ha eliminado correctamente de la configuración, escribe git config --list. No deberías ver un valor para commit.gpgsign en la lista.

Errores causados por configuraciones en conflicto

Para firmar automáticamente las confirmaciones, GitHub Codespaces establece unos valores de configuración de Git determinados en el espacio de código. Si invalidas los valores establecidos por GitHub Codespaces, es posible que no puedas firmar las confirmaciones.

Es posible que invalides accidentalmente estos valores si has vinculado GitHub Codespaces con un repositorio dotfiles que contiene archivos de configuración de Git. Para obtener más información sobre el uso de dotfiles con GitHub Codespaces, consulta: "Personalización de GitHub Codespaces para tu cuenta."

Comprobación de configuraciones en conflicto

Para firmar las confirmaciones con GPG, GitHub Codespaces establece automáticamente los siguientes valores de configuración de Git en el nivel del sistema.

Opción de configuraciónValor obligatorio
user.nameDebe coincidir con el nombre completo establecido en tu perfil de GitHub
credential.helperSe debe establecer en /.codespaces/bin/gitcredential_github.sh
gpg.programSe debe establecer en /.codespaces/bin/gh-gpgsign

Para comprobar que estos valores se establecen correctamente en un espacio de código, puedes usar el comando git config --list --show-origin. Dado que GitHub Codespaces establece esta configuración en el nivel del sistema, los valores de configuración necesarios deben proceder de /usr/local/etc/gitconfig.

$ git config --list --show-origin
file:/usr/local/etc/gitconfig   credential.helper=/.codespaces/bin/gitcredential_github.sh
file:/usr/local/etc/gitconfig   user.name=Mona Lisa
file:/usr/local/etc/gitconfig   gpg.program=/.codespaces/bin/gh-gpgsign

Además de los valores enumerados anteriormente, pueden producirse errores si los dotfiles usados en los espacios de código contienen cualquiera de los valores siguientes.

  • El valor de configuración de Git user.signingkey
  • El valor de configuración de Git commit.gpgsign
  • Un GITHUB_TOKEN establecido manualmente

Eliminación de configuraciones en conflicto

Si deseas mantener habilitada la comprobación automática de GPG para GitHub Codespaces, deberás eliminar cualquier tipo de configuraciones en conflicto de los dotfiles usados en los espacios de código.

Por ejemplo, si el archivo global .gitconfig del equipo local contiene un valor gpg.program y lo has insertado en un repositorio de dotfiles que está vinculado a GitHub Codespaces, probablemente desearás eliminar gpg.program de este archivo y establecerlo en su lugar en el nivel del sistema del equipo local.

Nota: los cambios realizados en el repositorio de dotfiles se aplicarán a los nuevos espacios de código que crees, pero no a los espacios de código existentes.

  1. En el equipo local, abra un terminal.

  2. Para quitar el valor en conflicto de ~/.gitconfig (Mac/Linux) o C:\Users\YOUR-USER\.gitconfig (Windows), usa el comando git config --global --unset.

    $ git config --global --unset gpg.program
    
  3. Inserta el cambio en el repositorio de dotfiles en GitHub.

  4. Opcionalmente, para mantener la configuración local, establece el valor de nuevo en un archivo de configuración de Git que no insertes en el repositorio de dotfiles.

    Por ejemplo, puedes usar la marca --system para establecer la configuración en el archivo de nivel de sistema en PATH/etc/gitconfig, donde PATH es el directorio en el que está instalado Git en el sistema.

    $ git config --system gpg.program gpg2
    

Como alternativa, si el repositorio de dotfiles contiene un script de instalación en un archivo reconocido como install.sh, puedes usar la variable de entorno $CODESPACES para agregar lógica condicional, como por ejemplo establecer únicamente gpg.program si no te encuentras en un espacio de código. En el ejemplo siguiente, -z "$CODESPACES" devuelve true si no estás ubicado en un espacio de código.

Shell
if [ -z "$CODESPACES" ]; then
  git config --global gpg.program gpg2
fi

Información adicional