# GPGによるコミット署名

`git`には、リポジトリへのコミットプッシュを許可するユーザーを制御するための認証レイヤーがありますが、実際のコミット作成者を認証する機能はありません。

つまり、`Elon Musk <elon@tesla.com>` として変更をコミットし、お好みの `git` ホスト（例えば github.com）にプッシュすると、そのコミットは Elon の GitHub プロフィールにリンクされます。（試してみてください！ただし、彼を名乗ったことで Elon が怒ったとしても、当方は責任を負いません。）

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（Windows版`git`に同梱されています）に含まれています。

コミットはローカルで[GPG](https://gnupg.org/)を使用して署名できます。その後、プロファイルを構成して、これらのコミットがHub上で**verified**としてマークされるようにしてください。これにより、他のユーザーが信頼できるソース由来であることを確信できます。

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キーを追加しました！

## GPGでコミットに署名するようにgitを設定する

最後のステップは、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を実行できます。

