# Подписание коммитов с помощью GPG

`git` имеет слой аутентификации для контроля того, кто может отправлять коммиты в репозиторий, но он не аутентифицирует фактических авторов коммитов.

Другими словами, вы можете коммитить изменения как `Elon Musk <elon@tesla.com>`, отправлять их на ваш любимый хостинг `git` (например, github.com), и ваш коммит будет ссылаться на профиль Илона в GitHub. (Попробуйте! Но не вините нас, если Илон разозлится на вас за то, что вы выдаёте себя за него.)

Причины, по которым мы реализовали подпись GPG:
- Для обеспечения более детального уровня безопасности, особенно учитывая, что всё больше корпоративных пользователей полагаются на Hub.
- Для предоставления ML-бенчмарков, подкреплённых криптографически защищённым источником.

См. статью 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: Signing your work](https://git-scm.com/book/en/v2/Git-Tools-Signing-Your-Work).

## Настройка проверки подписанных коммитов

Для выполнения следующих команд вам необходимо установить [GPG](https://gnupg.org/) на вашей системе.
> По умолчанию он входит в состав большинства дистрибутивов Linux. На Windows он включён в Git Bash (который поставляется вместе с `git` для Windows).

Вы можете подписывать свои коммиты локально с помощью [GPG](https://gnupg.org/). Затем настройте свой профиль, чтобы эти коммиты помечались как **verified** на 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 [account](https://huggingface.co/settings/account).

## Добавление GPG-ключа в ваш аккаунт

1. Сначала выберите или сгенерируйте GPG-ключ на вашем компьютере. Убедитесь, что адрес электронной почты ключа совпадает с адресом в вашем аккаунте Hugging Face [account](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>
```

Затем добавьте флаг `-S` к командам `git commit`, чтобы подписывать свои коммиты!

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

После отправки на Hub вы должны увидеть коммит с бейджем «Verified».

> [!TIP]
> Чтобы по умолчанию подписывать все коммиты в любом локальном репозитории на вашем компьютере, выполните git config --global commit.gpgsign true.

