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

GitLab UIからの署名されたコミット

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

この機能の利用は機能フラグによって制御されます。詳細については、履歴を参照してください。この機能はテストには利用できますが、本番環境での使用には適していません。

GitLab UIを使用してコミットを作成する場合、コミットはユーザーが直接プッシュするわけではありません。代わりに、ユーザーの署名入りでコミットが作成されます。

これらのコミットに署名するために、GitLabはインスタンス用に設定されたグローバルキーを使用します。GitLabはユーザーのプライベートキーにアクセスできないため、作成されたコミットは、ユーザーのアカウントに関連付けられたキーを使用して署名できません。

たとえばユーザーAが、ユーザーBが作成した提案を適用すると、コミットには次のものが含まれます:

Author: User A <a@example.com>
Committer: GitLab <noreply@gitlab.com>

Co-authored-by: User B <b@example.com>

前提条件

GitLab UIのコミット署名を使用する前に、設定する必要があります。

グループまたはプロジェクトのWebベースコミット署名をオンにする

  • 提供形態: GitLab.com

グループ内のすべてのプロジェクト、または個々のプロジェクトに対して、Webベースコミット署名をオンにできます。

Webベースコミット署名がオンになっている場合、GitLab UI(Webエディタ、Web IDE、およびマージリクエスト)を介して行われたすべてのコミットは、インスタンスの設定済み署名キーで自動的に署名されます。

グループの場合

前提条件:

  • グループのオーナーロールが必要です。

グループ内のすべてのプロジェクトに対してWebベースコミット署名をオンにするには、次の手順を実行します:

  1. 上部のバーで、検索または移動先を選択して、グループを見つけます。
  2. 設定 > リポジトリを選択します。
  3. 一般を展開します。
  4. Webベースコミットに署名チェックボックスを選択します。

グループ内のプロジェクトは、この設定を継承します。

プロジェクトの場合

前提条件:

  • プロジェクトのメンテナーまたはオーナーロールが必要です。

プロジェクトは、すでにWebベースコミット署名がオンになっているグループに属してはなりません。グループ設定がオンの場合、プロジェクトのチェックボックスは使用できません。

プロジェクトのWebベースコミット署名をオンにするには、次の手順を実行します:

  1. 上部のバーで、検索または移動先を選択して、プロジェクトを見つけます。
  2. 設定 > リポジトリを選択します。
  3. 一般を展開します。
  4. Webベースコミットに署名チェックボックスを選択します。

コミットのコミッターフィールド

Gitでは、コミットには作成者とコミッターの両方があります。Webコミットの場合、Committerフィールドは設定可能です。このフィールドを更新するには、GitLab UIコミットの署名設定を参照してください。

GitLabは、Committerフィールドがコミットを作成したユーザーに設定されていることに依存する、複数のセキュリティ機能を提供します。例:

コミットがインスタンスによって署名されている場合、GitLabはこれらの機能のためにAuthorフィールドに依存します。

REST APIを使用して作成されたコミット

REST APIを使用して作成されたコミットも、Webベースのコミットと見なされます。REST APIエンドポイントを使用すると、コミットのauthor_nameおよびauthor_emailフィールドを設定できるため、他のユーザーの代わりにコミットを作成できます。

コミット署名が有効になっている場合、APIリクエストを送信するユーザーとは異なるauthor_nameおよびauthor_emailを持つREST APIを使用して作成されたコミットは拒否されます。

トラブルシューティング

リベース後にWebコミットが署名解除される

ブランチ内の以前に署名されたコミットは、次の場合に署名解除されます:

  • コミット署名は、GitLab UIから作成されたコミットに対して構成されています。
  • マージリクエストは、GitLab UIからリベースされます。

これは、以前のコミットが変更され、ターゲットブランチの一番上に追加されるために発生します。GitLabはこれらのコミットに署名できません。

この問題を回避するには、ブランチをローカルでリベースし、変更をGitLabにプッシュして戻します。