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

デフォルトブランチ

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

新しいプロジェクトを作成すると、GitLabはリポジトリにデフォルトブランチを作成します。デフォルトブランチには、他のブランチにはない特別な設定オプションがあります:

新しいプロジェクトのデフォルトブランチの名前は、GitLab管理者によってインスタンスまたはグループに加えられた設定の変更によって異なります。GitLabは、最初に特定されたカスタマイズがないか確認し、次に広範なレベルで確認します。GitLabのデフォルトは、カスタマイズが設定されていない場合にのみ使用します:

  1. プロジェクト固有のカスタムデフォルトブランチ名。
  2. プロジェクトの直接のサブグループで指定されたカスタムグループのデフォルトブランチ名
  3. プロジェクトのトップレベルグループで指定されたカスタムグループのデフォルトブランチ名。
  4. インスタンスに設定されたカスタムデフォルトブランチ名。
  5. どのレベルでもカスタムデフォルトブランチ名が設定されていない場合、GitLabはデフォルトでmainを使用します。

GitLab UIでは、どのレベルでもデフォルトを変更できます。GitLabは、リポジトリのコピーを更新するために必要なGitコマンドも提供しています。

プロジェクトのデフォルトブランチ名を変更する

前提要件:

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

個々のプロジェクトのデフォルトブランチを更新するには:

  1. 左側のサイドバーで、検索または移動先を選択して、プロジェクトを見つけます。
  2. 設定 > リポジトリを選択します。
  3. ブランチのデフォルトを展開します。デフォルトブランチで、新しいデフォルトブランチを選択します。
  4. オプション。マージリクエストがクローズパターンを使用するときにイシューをクローズするには、デフォルトのブランチで参照されているイシューを自動的に終了しますチェックボックスを選択します。
  5. 変更を保存を選択します。

APIユーザーは、プロジェクトの作成または編集時に、Projects APIdefault_branch属性を使用することもできます。

インスタンス内の新しいプロジェクトのデフォルトブランチ名を変更する

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

GitLab Self-Managedの管理者は、そのインスタンスでホストされているプロジェクトの初期ブランチをカスタマイズできます。個々のグループとサブグループは、プロジェクトのインスタンスのデフォルトをオーバーライドできます。

  1. 左側のサイドバーの下部で、管理者を選択します。
  2. 設定 > リポジトリを選択します。
  3. デフォルトブランチを展開します。
  4. 初期のデフォルトブランチ名で、新しいデフォルトブランチを選択します。
  5. 変更を保存を選択します。

設定を変更した後にこのインスタンスで作成されたプロジェクトは、グループまたはサブグループの設定でオーバーライドされない限り、カスタムブランチ名を使用します。

グループ内の新しいプロジェクトのデフォルトブランチ名を変更する

前提要件:

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

グループ内の新しいプロジェクトのデフォルトブランチ名を変更するには:

  1. 左側のサイドバーで、検索または移動先を選択して、グループを見つけます。
  2. 設定 > リポジトリを選択します。
  3. デフォルトブランチを展開します。
  4. 初期のデフォルトブランチ名で、新しいデフォルトブランチを選択します。
  5. 変更を保存を選択します。

設定を変更した後にこのグループで作成されたプロジェクトは、サブグループの設定でオーバーライドされない限り、カスタムブランチ名を使用します。

初期デフォルトブランチを保護する

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

GitLab管理者とグループオーナーは、次のいずれかのオプションを使用して、インスタンスまたは個々のグループのリポジトリのデフォルトブランチに適用するブランチ保護を定義できます:

  • 完全に保護 - デフォルト値。デベロッパーは新しいコミットをプッシュできませんが、メンテナーはプッシュできます。だれも強制プッシュできません。
  • 最初のプッシュ後に完全に保護 - デベロッパーはリポジトリに最初のコミットをプッシュできますが、その後は誰でもプッシュできません。メンテナーは常にプッシュできます。だれも強制プッシュできません。
  • プッシュから保護 - デベロッパーは新しいコミットをプッシュできませんが、ブランチへのマージリクエストは承認できます。メンテナーはブランチにプッシュできます。
  • 部分的に保護 - デベロッパーとメンテナーの両方が新しいコミットをプッシュできますが、強制プッシュはできません。
  • 保護されていない - デベロッパーとメンテナーの両方が新しいコミットをプッシュでき、強制プッシュできます。

完全に保護が選択されていない限り、悪意のあるデベロッパーが機密データを盗もうとする可能性があります。たとえば、悪意のある.gitlab-ci.ymlファイルが保護ブランチにコミットされ、後でそのブランチに対してパイプラインが実行されると、グループのCI/CD変数が流出する可能性があります。

インスタンス内のすべてのプロジェクト

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

この設定は、各リポジトリのデフォルトブランチにのみ適用されます。他のブランチを保護するには、次のいずれかを実行する必要があります:

GitLab Self-Managedインスタンスの管理者は、そのインスタンスでホストされているプロジェクトの初期のデフォルトのブランチ保護をカスタマイズできます。個々のグループとサブグループは、プロジェクトのインスタンスのデフォルト設定をオーバーライドできます。

  1. 左側のサイドバーの下部で、管理者を選択します。
  2. 設定 > リポジトリを選択します。
  3. デフォルトブランチを展開します。
  4. 初期のデフォルトのブランチ保護を選択します。
  5. グループオーナーがインスタンスのデフォルトブランチ保護をオーバーライドできるようにするには、Allow owners to manage default branch protection per group(オーナーがグループごとにデフォルトのブランチ保護を管理できるようにする)を選択します。
  6. 変更を保存を選択します。

デフォルトのブランチ保護のオーバーライドを防止する

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

グループオーナーは、グループ単位でインスタンス全体に設定されたデフォルトのブランチ保護をオーバーライドできます。GitLab PremiumまたはUltimateでは、GitLab管理者はグループオーナーのこの権限を無効にし、インスタンスに設定された保護ルールを適用できます:

  1. 左側のサイドバーの下部で、管理者を選択します。
  2. 設定 > リポジトリを選択します。
  3. デフォルトブランチセクションを展開します。
  4. Allow owners to manage default branch protection per group(オーナーがグループごとにデフォルトのブランチ保護を管理できるようにする)チェックボックスをオフにします。
  5. 変更を保存を選択します。

GitLab管理者は、グループのデフォルトブランチ保護を引き続き更新できます。

グループ内のすべてのプロジェクト

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

グループオーナーは、グループ単位でインスタンス全体に設定されたデフォルトのブランチ保護をオーバーライドできます。GitLab PremiumまたはUltimateでは、GitLab管理者が初期のデフォルトのブランチ保護を適用できます。これにより、グループオーナーがこの設定を変更できなくなります。

  1. 左側のサイドバーで、検索または移動先を選択して、グループを見つけます。
  2. 設定 > リポジトリを選択します。
  3. デフォルトブランチを展開します。
  4. 初期のデフォルトのブランチ保護を選択します。
  5. 変更を保存を選択します。

リポジトリのデフォルトブランチ名を更新する

デフォルトブランチ名を変更すると、テスト、CI/CD設定、サービス、ヘルパーユーティリティ、およびリポジトリが使用するインテグレーションが中断される可能性があります。このブランチ名を変更する前に、プロジェクトオーナーとメンテナーに相談してください。この変更のスコープには、関連するコードやスクリプト内での古いブランチ名の参照も含まれていることを、プロジェクトオーナーおよびメンテナーが理解していることを確認してください。

既存のリポジトリのデフォルトブランチ名を変更する場合は、新しいブランチを作成しないでください。デフォルトブランチの名前を変更することで、その履歴を保持できます。この例では、Gitリポジトリ(example)のデフォルトブランチの名前を変更します:

  1. ローカルコマンドラインで、exampleリポジトリに移動し、デフォルトブランチにいることを確認します:

    cd example
    git checkout master
  2. 既存のデフォルトブランチの名前を新しい名前(main)に変更します。引数-mは、すべてのコミット履歴を新しいブランチに転送します:

    git branch -m master main
  3. 新しく作成したmainブランチをアップストリームにプッシュし、同じ名前のリモートブランチを追跡するようにローカルブランチを設定します:

    git push -u origin main
  4. 古いデフォルトブランチを削除する予定がある場合は、新しいデフォルトブランチであるmainを指すようにHEADを更新します:

    git symbolic-ref refs/remotes/origin/HEAD refs/remotes/origin/main
  5. 少なくともメンテナーのロールでGitLabにサインインし、このプロジェクトのデフォルトブランチを変更する手順に従います。新しいデフォルトブランチとしてmainを選択します。

  6. 保護ブランチのドキュメントの説明に従って、新しいmainブランチを保護します。

  7. オプション。古いデフォルトブランチを削除する場合は:

    1. そのブランチを指しているものがないことを確認します。

    2. リモートでブランチを削除します:

      git push origin --delete master

      新しいデフォルトブランチが期待どおりに動作することを確認したら、後でブランチを削除できます。

  8. プロジェクトのコントリビューターにこの変更を通知します。コントリビューターもいくつかの手順を実行する必要があるためです:

    • コントリビューターは、新しいデフォルトブランチをリポジトリのローカルコピーにプルする必要があります。
    • 古いデフォルトブランチをターゲットとするオープンマージリクエストを持つコントリビューターは、代わりにmainを使用するようにマージリクエストを手動で再指定する必要があります。
  9. リポジトリで、コード内の古いブランチ名への参照を更新します。

  10. ヘルパーユーティリティやインテグレーションなど、リポジトリの外部にある関連コードおよびスクリプト内の古いブランチ名への参照を更新します。

デフォルトブランチの名前変更のリダイレクト

プロジェクト内の特定のファイルまたはディレクトリのURLには、プロジェクトのデフォルトブランチ名が埋め込まれており、ドキュメントまたはブラウザのブックマークに表示されることがよくあります。リポジトリのデフォルトブランチ名を更新すると、これらのURLが変更されるため、更新する必要があります。

移行期間中の混乱を軽減するため、プロジェクトのデフォルトブランチが変更されるたびに、GitLabは古いデフォルトブランチの名前を記録します。そのブランチが削除された場合、そのブランチ上のファイルまたはディレクトリを表示しようとすると、「見つかりません」ページが表示されるのではなく、現在のデフォルトブランチにリダイレクトされます。

トラブルシューティング

デフォルトブランチを変更できない: 現在のブランチにリセットされる

この問題はイシュー20474で追跡しています。この問題は、HEADという名前のブランチがリポジトリに存在する場合によく発生します。問題を修正するには、以下を実行します:

  1. ローカルリポジトリで、新しい一時ブランチを作成してプッシュします:

    git checkout -b tmp_default && git push -u origin tmp_default
  2. GitLabで、その一時ブランチにデフォルトブランチを変更します。

  3. ローカルリポジトリから、HEADブランチを削除します:

    git push -d origin HEAD
  4. GitLabで、使用するデフォルトブランチを変更します。

GraphQLでデフォルトブランチをクエリする

GraphQLクエリを使用して、グループ内のすべてのプロジェクトのデフォルトブランチを取得できます。

結果の単一ページにすべてのプロジェクトを返すには、GROUPNAMEをグループへのフルパスに置き換えます。GitLabは結果の最初のページを返します。hasNextPagetrueの場合、after: nullnullendCursorの値に置き換えることで、次のページをリクエストできます:

{
 group(fullPath: "GROUPNAME") {
   projects(after: null) {
     pageInfo {
       hasNextPage
       endCursor
     }
     nodes {
       name
       repository {
         rootRef
       }
     }
   }
 }
}

新しいサブグループが上位レベルのサブグループからデフォルトブランチ名を継承しない

サブグループでデフォルトブランチを設定しても、その中にある別のサブグループにプロジェクトが含まれている場合、デフォルトブランチは継承されません。

この問題はイシュー327208で追跡しています。