# Firmar commits con GPG

`git` tiene una capa de autenticación para controlar quién puede enviar commits a un repositorio, pero no autentica a los autores de los commits.

En otras palabras, puedes confirmar los cambios como `Elon Musk <elon@tesla.com>`, enviarlos a tu host de `git` preferido (por ejemplo, github.com) y tu confirmación enlazará con el perfil de GitHub de Elon. (¡Pruébalo! Pero no nos culpes si Elon se enoja contigo por suplantar su identidad.)

Las razones por las que implementamos la firma GPG fueron:
- Para ofrecer una seguridad más granular, especialmente a medida que cada vez más usuarios de Enterprise dependen del Hub.
- Para proporcionar benchmarks de ML respaldados por una fuente criptográficamente segura.

Vea [Cómo (y por qué) firmar los commits de `git`](https://withblue.ink/2020/05/17/how-and-why-to-sign-git-commits.html) de Ale Segala para obtener más contexto.

Puedes demostrar que un commit fue creado por ti con GNU Privacy Guard (GPG) y un servidor de claves. GPG es una herramienta criptográfica que se utiliza para verificar la autenticidad del origen de un mensaje. A continuación, te explicamos cómo configurar esto en Hugging Face.

El libro Pro Git es, como siempre, un buen recurso sobre la firma de commits: [Pro Git: Firmar tu trabajo](https://git-scm.com/book/en/v2/Git-Tools-Signing-Your-Work).

## Configuración de la verificación de commits firmados

Deberás instalar [GPG](https://gnupg.org/) en tu sistema para ejecutar los siguientes comandos.
> Está incluido por defecto en la mayoría de las distribuciones de Linux. En Windows, está incluido en Git Bash (que viene con `git` para Windows).

Puedes firmar tus commits localmente usando [GPG](https://gnupg.org/). Luego, configura tu perfil para marcar estos commits como **verified** en el Hub, de modo que otras personas puedan tener la confianza de que provienen de una fuente confiable.

Para una explicación más detallada sobre cómo interactúan git y GPG, visite la [documentación de git sobre el tema](https://git-scm.com/book/en/v2/Git-Tools-Signing-Your-Work)

Los commits pueden tener los siguientes estados de firma:

| Estado            | Explicación                                                  |
| ----------------- | ------------------------------------------------------------ |
| Verificado          | El commit está firmado y la firma se ha verificado           |
| No verificado        | El commit está firmado, pero la firma no se pudo verificar |
| Sin estado de firma | El commit no está firmado                                     |

Para que un commit se marque como **verificado**, debes subir la clave pública utilizada para firmarlo en tu cuenta de Hugging Face.

Use the `gpg --list-secret-keys` command to list the GPG keys for which you have both a public and private key. A private key is required for signing commits or tags.

Si no tienes un par de claves GPG o no quieres usar las claves existentes para firmar tus commits, ve a **Generar una nueva clave GPG**.

En caso contrario, vaya directamente a [Añadir una clave GPG a su cuenta](#adding-a-gpg-key-to-your-account).

## Generar una nueva clave GPG

Para generar una clave GPG, ejecuta lo siguiente:

```bash
gpg --gen-key
```

A continuación, GPG te guiará a través del proceso de creación de un par de claves GPG.

Asegúrate de especificar una dirección de correo electrónico para esta clave y de que la dirección de correo electrónico coincida con la que especificaste en tu [cuenta](https://huggingface.co/settings/account) de Hugging Face.

## Agregar una clave GPG a tu cuenta

1. Primero, seleccione o genere una clave GPG en su computadora. Asegúrese de que la dirección de correo electrónico de la clave coincida con la de su [cuenta](https://huggingface.co/settings/account) de Hugging Face y de que el correo de su cuenta esté verificado.

2. Exporta la parte pública de la clave seleccionada:

```bash
gpg --armor --export <YOUR KEY ID>
```

3. Luego visita la [página de configuración](https://huggingface.co/settings/keys) de tu perfil y haz clic en **Add GPG Key**.

Copia y pega la salida del comando `gpg --export` en el área de texto y haz clic en **Add Key**.

4. ¡Felicidades! 🎉 Acabas de añadir una clave GPG a tu cuenta.

## Configura git para firmar tus commits con GPG

El último paso es configurar git para firmar tus commits:

```bash
git config user.signingkey <Your GPG Key ID>
git config user.email <Your email on hf.co>
```

Luego, añade la bandera `-S` a tus comandos de `git commit` para firmar tus commits.

```bash
git commit -S -m "My first signed commit"
```

Una vez que se haya enviado al Hub, deberías ver el commit con la insignia "Verified".

> [!TIP]
> Para firmar todos los commits de forma predeterminada en cualquier repositorio local de tu computadora, puedes ejecutar git config --global commit.gpgsign true.

