# Assinando commits com GPG

`git` possui uma camada de autenticação para controlar quem pode enviar commits para um repositório, mas não autentica os autores reais dos commits.

Em outras palavras, você pode commitar alterações como `Elon Musk <elon@tesla.com>`, enviá-las para seu host `git` preferido (por exemplo, github.com) e seu commit será vinculado ao perfil do GitHub de Elon. (Experimente! Mas não nos culpe se Elon ficar bravo com você por se passar por ele.)

As razões pelas quais implementamos a assinatura GPG foram:
- Para fornecer segurança mais granular, especialmente à medida que cada vez mais usuários Enterprise dependem do Hub.
- Para fornecer benchmarks de ML respaldados por uma fonte criptograficamente segura.

Veja [Como (e por que) assinar commits do `git`](https://withblue.ink/2020/05/17/how-and-why-to-sign-git-commits.html) de Ale Segala para mais contexto.

Você pode provar que um commit foi criado por você usando o GNU Privacy Guard (GPG) e um servidor de chaves. O GPG é uma ferramenta criptográfica usada para verificar a autenticidade da origem de uma mensagem. Explicaremos abaixo como configurar isso no Hugging Face.

O livro Pro Git é, como de costume, um bom recurso sobre a assinatura de commits: [Pro Git: Signing your work](https://git-scm.com/book/en/v2/Git-Tools-Signing-Your-Work).

## Configurando a verificação de commits assinados

Você precisará instalar o [GPG](https://gnupg.org/) no seu sistema para executar os comandos a seguir.
> Ele está incluído por padrão na maioria das distribuições Linux. No Windows, ele está incluído no Git Bash (que vem com o `git` para Windows).

Você pode assinar seus commits localmente usando [GPG](https://gnupg.org/). Em seguida, configure seu perfil para marcar esses commits como **verificados** no Hub, para que outras pessoas possam ter a confiança de que eles vêm de uma fonte confiável.

Para uma explicação mais aprofundada sobre como o git e o GPG interagem, visite a [documentação do git sobre o assunto](https://git-scm.com/book/en/v2/Git-Tools-Signing-Your-Work)

Commits podem ter os seguintes status de assinatura:

| Status            | Explicação                                                  |
| ----------------- | ------------------------------------------------------------ |
| Verificado          | O commit é assinado e a assinatura é verificada           |
| Não verificado        | O commit é assinado, mas a assinatura não pôde ser verificada |
| No status de assinatura | O commit não está assinado                                     |

Para que um commit seja marcado como **verificado**, você precisa enviar a chave pública usada para assiná-lo na sua conta do Hugging Face.

Use o comando `gpg --list-secret-keys` para listar as chaves GPG para as quais você possui uma chave pública e uma chave privada. Uma chave privada é necessária para assinar commits ou tags.

Se você não tiver um par de chaves GPG ou não quiser usar as chaves existentes para assinar seus commits, vá para **Gerando uma nova chave GPG**.

Caso contrário, vá direto para [Adicionando uma chave GPG à sua conta](#adding-a-gpg-key-to-your-account).

## Gerando uma nova chave GPG

Para gerar uma chave GPG, execute o seguinte:

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

O GPG, em seguida, o guiará pelo processo de criação de um par de chaves GPG.

Certifique-se de especificar um endereço de e-mail para esta chave e de que o endereço de e-mail corresponda ao que você especificou em sua [conta](https://huggingface.co/settings/account) do Hugging Face.

## Adicionando uma chave GPG à sua conta

1. Primeiro, selecione ou gere uma chave GPG no seu computador. Certifique-se de que o endereço de e-mail da chave corresponda ao da sua conta no Hugging Face [account](https://huggingface.co/settings/account) e de que o e-mail da sua conta esteja verificado.

2. Exporte a parte pública da chave selecionada:

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

3. Em seguida, acesse a [página de configurações](https://huggingface.co/settings/keys) do seu perfil e clique em **Add GPG Key**.

Copie e cole a saída do comando `gpg --export` na área de texto e clique em **Add Key**.

4. Parabéns! 🎉 Você acabou de adicionar uma chave GPG à sua conta!

## Configure o git para assinar seus commits com GPG

A última etapa é configurar o git para assinar seus commits:

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

Em seguida, adicione a flag `-S` aos seus comandos `git commit` para assinar seus commits!

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

Depois de enviar para o Hub, você deve ver o commit com o selo "Verified".

> [!TIP]
> Para assinar todos os commits por padrão em qualquer repositório local no seu computador, você pode executar git config --global commit.gpgsign true.

