正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

GPGでコミットに署名する

  • プラン: Free、Premium、Ultimate
  • 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated

GPG(GNU Privacy Guard)キーを使用して、GitLabリポジトリで行うコミットに署名できます。

GitLabでは、すべてのOpenPGP、PGP、およびGPG関連のマテリアルと実装に対してGPGという用語を使用します。

コミットが検証済みとみなされるためのGitLabの条件:

  • コミッターは、GPG公開/秘密キーペアを持っている必要があります。
  • コミッターの公開キーがGitLabアカウントにアップロードされている必要があります。
  • GPG公開キーのいずれかのメールアドレスが、GitLabのコミッターが使用する検証済みのメールアドレスと一致する必要があります。このアドレスを非公開にするには、GitLabがプロファイルで提供する自動生成されたプライベートコミットメールアドレスを使用します。
  • コミッターのメールアドレスは、GPGキーからの検証済みメールアドレスと一致する必要があります。

GitLabは独自のキーリングを使用してGPG署名を検証します。公開キーサーバーにはアクセスしません。

GPG検証済みタグはサポートされていません。

GPGの詳細については、関連トピックの一覧を参照してください。

ユーザーの公開GPGキーを表示する

ユーザーの公開GPGキーを表示するには、次のいずれかの方法があります:

  • https://gitlab.example.com/<USERNAME>.gpgにアクセスします。GitLabは、ユーザーがGPGキーを設定している場合はそのGPGキーを表示し、GPGキーを設定していないユーザーの場合は空白のページを表示します。
  • ユーザーのプロフィール(例: https://gitlab.example.com/<USERNAME>)にアクセスします。ユーザープロフィールの右上隅で、GPGパブリックキーを表示( key )を選択します。このボタンは、ユーザーがキーを設定している場合にのみ表示されます。

コミット署名を設定する

コミットに署名するには、ローカルマシンとGitLabアカウントの両方を設定する必要があります:

  1. GPGキーを作成します。
  2. GPGキーをアカウントに追加します。
  3. GPGキーをGitに関連付けます。
  4. Gitコミットに署名します。

GPGキーを作成する

GPGキーをまだお持ちでない場合は、次の手順で作成します:

  1. お使いのオペレーティングシステムにGPGをインストールします。オペレーティングシステムにgpg2がインストールされている場合は、このページのコマンドでgpggpg2に置き換えてください。

  2. キーペアを生成するには、使用しているgpgのバージョンに適したコマンドを実行します:

    # Use this command for the default version of GPG, including
    # Gpg4win on Windows, and most macOS versions:
    gpg --gen-key
    
    # Use this command for versions of GPG later than 2.1.17:
    gpg --full-gen-key
  3. キーで使用するアルゴリズムを選択するか、Enterを押して、デフォルトオプションのRSA and RSAを選択します。

  4. キーの長さ (ビット単位) を選択します。GitLabは4096ビットキーを推奨します。

  5. キーの有効期間を指定します。この値は主観的なものであり、デフォルト値は有効期限なしです。

  6. 回答を確認するには、yと入力します。

  7. 名前を入力します。

  8. メールアドレスを入力します。GitLabアカウントの検証済みのメールアドレスと一致する必要があります。

  9. オプション。名前の後に括弧で囲んで表示するコメントを入力します。

  10. GPGには、これまでに入力した情報が表示されます。情報を編集するか、O (Okayのため) を押して続行します。

  11. 強力なパスワードを入力し、もう一度入力して確認します。

  12. プライベートGPGキーを一覧表示するには、このコマンドを実行して、キーの生成時に使用したメールアドレスで<EMAIL>を置き換えます:

    gpg --list-secret-keys --keyid-format LONG <EMAIL>
  13. 出力で、sec行を識別し、GPGキーIDをコピーします。/文字の後に開始します。この例では、キーIDは30F2B65B9246B6CAです:

    sec   rsa4096/30F2B65B9246B6CA 2017-08-18 [SC]
          D5E4F29F3275DC0CDA8FFC8730F2B65B9246B6CA
    uid                   [ultimate] Mr. Robot <your_email>
    ssb   rsa4096/B7ABC0813E4028C0 2017-08-18 [E]
  14. 関連付けられた公開キーを表示するには、このコマンドを実行して、前の手順のGPGキーIDで<ID>を置き換えます:

    gpg --armor --export <ID>
  15. BEGIN PGP PUBLIC KEY BLOCK行とEND PGP PUBLIC KEY BLOCK行を含む公開キーをコピーします。次の手順でこのキーが必要になります。

GPGキーをアカウントに追加する

ユーザー設定にGPGキーを追加するには:

  1. GitLabにサインインします。
  2. 左側のサイドバーで、アバターを選択します。
  3. プロファイルの編集を選択します。
  4. GPGキー key )を選択します。
  5. 新しいキーを追加を選択します。
  6. キーに、公開キーを貼り付けます。
  7. キーをアカウントに追加するには、キーを追加を選択します。

GitLabには、キーのフィンガープリント、メールアドレス、および作成日が表示されます。

キーを追加した後は、編集できません。代わりに、問題のあるキーを削除して、再度追加してください。

GPGキーをGitに関連付ける

GPGキーを作成してアカウントに追加したら、このキーを使用するようにGitを設定する必要があります:

  1. 作成したばかりのプライベートGPGキーを一覧表示するには、このコマンドを実行して、キーのメールアドレスで<EMAIL>を置き換えます:

    gpg --list-secret-keys --keyid-format LONG <EMAIL>
  2. secで始まるGPGプライベートキーIDをコピーします。この例では、プライベートキーIDは30F2B65B9246B6CAです:

    sec   rsa4096/30F2B65B9246B6CA 2017-08-18 [SC]
          D5E4F29F3275DC0CDA8FFC8730F2B65B9246B6CA
    uid                   [ultimate] Mr. Robot <your_email>
    ssb   rsa4096/B7ABC0813E4028C0 2017-08-18 [E]
  3. このコマンドを実行して、キーでコミットに署名するようにGitを設定し、GPGキーIDで<KEY ID>を置き換えます:

    git config --global user.signingkey <KEY ID>

Gitコミットに署名する

公開キーをアカウントに追加した後、個々のコミットに手動で署名するか、署名されたコミットがデフォルトになるようにGitを設定できます:

  • 個々のGitコミットに手動で署名するには:

    1. 署名するコミットに-Sフラグを追加します:

      git commit -S -m "My commit message"
    2. 要求されたら、GPGキーのパスフレーズを入力します。

    3. GitLabにプッシュし、コミットが検証されていることを確認します。

  • デフォルトですべてのGitコミットに署名するには、次のコマンドを実行します:

    git config --global commit.gpgsign true

署名キーを条件付きで設定する

仕事用や個人用など、別々の目的で署名キーを管理している場合は、.gitconfigファイルでIncludeIfステートメントを使用して、コミットに署名するキーを設定します。

前提要件:

  • Gitバージョン2.13以降が必要です。
  1. メインの~/.gitconfigファイルと同じディレクトリに、.gitconfig-gitlabなどの2番目のファイルを作成します。

  2. メインの~/.gitconfigファイルに、GitLab以外のプロジェクトでの作業用のGit設定を追加します。

  3. この情報をメインの~/.gitconfigファイルの最後に追加します:

    # The contents of this file are included only for GitLab.com URLs
    [includeIf "hasconfig:remote.*.url:https://gitlab.com/**"]
    
    # Edit this line to point to your alternative configuration file
    path = ~/.gitconfig-gitlab
  4. 別の.gitconfig-gitlabファイルで、GitLabリポジトリにコミットするときに使用する上書きの設定を追加します。明示的に上書きしない限り、メインの~/.gitconfigファイルからのすべての設定が保持されます。この例では、次のようになります。

    # Alternative ~/.gitconfig-gitlab file
    # These values are used for repositories matching the string 'gitlab.com',
    # and override their corresponding values in ~/.gitconfig
    
    [user]
    email = you@example.com
    signingkey = <KEY ID>
    
    [commit]
    gpgsign = true

GPGキーを取り消す

GPGキーが侵害された場合は、取り消してください。キーを取り消すと、今後および過去のコミットの両方が変更されます:

  • このキーで署名された過去のコミットは、未検証としてマークされます。
  • このキーで署名された今後のコミットは、未検証としてマークされます。

GPGキーを取り消すには:

  1. 左側のサイドバーで、アバターを選択します。
  2. プロファイルの編集を選択します。
  3. GPGキー key )を選択します。
  4. 削除するGPGキーの横にある取り消しを選択します。

GPGキーを削除する

GitLabアカウントからGPGキーを削除すると:

  • このキーで署名された以前のコミットは、検証されたままになります。
  • このキーを使用しようとする今後のコミット(作成済みでまだプッシュされていないコミットを含む)は検証されません。

アカウントからGPGキーを削除するには:

  1. 左側のサイドバーで、アバターを選択します。
  2. プロファイルの編集を選択します。
  3. GPGキー key )を選択します。
  4. 削除するGPGキーの横にある削除( remove )を選択します。

今後および過去のコミットの両方の検証を解除する必要がある場合は、代わりに関連付けられたGPGキーを取り消してください。

トラブルシューティング

シークレットキーが利用できない

エラーsecret key not availableまたはgpg: signing failed: secret key not availableが表示された場合は、gpgの代わりにgpg2を使用してみてください:

git config --global gpg.program gpg2

GPGキーがパスワードで保護されていて、パスワード入力プロンプトが表示されない場合は、Shellのrcファイル (通常は~/.bashrcまたは~/.zshrc) にexport GPG_TTY=$(tty)を追加します

GPGがデータの署名に失敗する

GPGキーがパスワードで保護されていて、次のいずれかのエラーが表示される場合:

error: gpg failed to sign the data
fatal: failed to write commit object
gpg: signing failed: Inappropriate ioctl for device

パスワード入力プロンプトが表示されない場合:

  1. テキストエディタで、Shellの設定ファイル (通常は~/.bashrcまたは~/.zshrc) を開きます。

  2. ファイルに次の行を追加します:

    export GPG_TTY=$(tty)
  3. ファイルを保存してテキストエディタを終了します。

  4. 変更を適用します。次のいずれかを選択します:

    • ターミナルを再起動します。
    • source ~/.bashrcまたはsource ~/.zshrcを実行します。

正確な手順は、オペレーティングシステムとShellの設定によって異なる場合があります。