# 使用 GPG 对提交进行签名

`git` 有一个身份验证层，用于控制谁可以向仓库推送提交，但它不会验证实际的提交作者。

换句话说，你可以以 `Elon Musk <elon@tesla.com>` 的身份提交更改，将它们推送到你首选的 `git` 托管平台（例如 github.com），你的提交就会链接到 Elon 的 GitHub 个人资料。（试试看！但如果你冒充他导致 Elon 生气，可别怪我们。）

我们实现 GPG 签名的原因如下：
- 为了提供更细粒度的安全性，尤其是在越来越多的企业用户依赖 Hub 的情况下。
- 提供由密码学安全来源支持的机器学习基准测试。

有关更多背景信息，请参阅 Ale Segala 的 [如何（以及为何）对 `git` 提交进行签名](https://withblue.ink/2020/05/17/how-and-why-to-sign-git-commits.html)。

你可以使用 GNU Privacy Guard (GPG) 和密钥服务器来证明某个提交是由你创建的。GPG 是一种用于验证消息来源真实性的加密工具。下面我们将介绍如何在 Hugging Face 上完成此设置。

《Pro Git》一书一如既往地是了解提交签名的优质资源：[Pro Git：签署你的工作](https://git-scm.com/book/en/v2/Git-Tools-Signing-Your-Work)。

## 设置签名提交验证

您需要先在系统中安装 [GPG](https://gnupg.org/)，才能执行以下命令。
> 它默认包含在大多数 Linux 发行版中。在 Windows 上，它包含在 Git Bash 中（随 Windows 版 `git` 一起提供）。

您可以在本地使用 [GPG](https://gnupg.org/) 对提交进行签名。然后配置您的个人资料，以便在 Hub 上将这些提交标记为 **已验证**，从而让其他人确信它们来自可信来源。

如需深入了解 git 和 GPG 如何交互，请访问[git 官方文档中关于此主题的说明](https://git-scm.com/book/en/v2/Git-Tools-Signing-Your-Work)

提交可以具有以下签名状态：

| 状态            | 解释                                                  |
| ----------------- | ------------------------------------------------------------ |
| 已验证          | 该提交已签名，且签名已通过验证           |
| 未验证        | 该提交已签名，但无法验证签名 |
| 无签名状态 | 该提交未签名                                     |

要将某个提交标记为 **verified**，你需要在 Hugging Face 账户中上传用于签名的公钥。

使用 `gpg --list-secret-keys` 命令列出同时拥有公钥和私钥的 GPG 密钥。签名提交或标签需要私钥。

如果您没有 GPG 密钥对，或者不想使用现有密钥来签署您的提交，请前往 **生成新的 GPG 密钥**。

否则，请直接前往 [将 GPG 密钥添加到您的账户](#adding-a-gpg-key-to-your-account)。

## 生成新的 GPG 密钥

要生成 GPG 密钥，请运行以下命令：

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

随后，GPG 将引导您完成创建 GPG 密钥对的过程。

请确保为此密钥指定一个电子邮件地址，并且该地址与您在 Hugging Face [账户](https://huggingface.co/settings/account)中指定的地址一致。

## 将 GPG 密钥添加到您的账户

1. 首先，在您的计算机上选择或生成一个 GPG 密钥。请确保该密钥的电子邮件地址与您的 Hugging Face [账户](https://huggingface.co/settings/account) 中的地址一致，并且您的账户邮箱已通过验证。

2. 导出所选密钥的公开部分：

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

3. 然后访问您的个人资料[设置页面](https://huggingface.co/settings/keys)，并点击**添加 GPG 密钥**。

在文本区域中复制并粘贴 `gpg --export` 命令的输出，然后单击 **Add Key**。

4. 恭喜！🎉 您刚刚向您的账户添加了一个 GPG 密钥！

## 配置 git 以使用 GPG 对提交进行签名

最后一步是配置 git 以签署你的提交：

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

然后，在您的 `git commit` 命令中添加 `-S` 标志，以签署您的提交！

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

推送到 Hub 后，您应该能看到带有“Verified”徽章的提交。

> [!TIP]
> 要在计算机上的任何本地仓库中默认对所有提交进行签名，您可以运行 git config --global commit.gpgsign true。

