ルールセットについて
ルールセットは、リポジトリに適用されるルールの名前付きリストです。 リポジトリ あたり 75 個のルールセット を設定できます。
ルールセットを作成するときに、特定のユーザーがルールセットの中のルールをバイパスすることを許可できます。 これは、リポジトリ管理者などの特定のロールを持つユーザー、または特定のチームや GitHub Apps にすることができます。 バイパスアクセス許可の付与について詳しくは、「リポジトリのルールセットの作成」をご覧ください。
GitHub Enterprise プランの organization では、organization 内の複数のリポジトリをターゲットにするように、organization レベルでルールセットを設定できます。 詳しくは、「組織内のリポジトリのルールセットを管理する」を GitHub Enterprise Cloud のドキュメントで参照してください。
ルールセットを使用して、リポジトリ内のブランチまたはタグをターゲットにしたり、リポジトリとリポジトリのフォーク ネットワーク全体へのプッシュをブロックしたりできます。
ブランチとタグのルールセット
ルールセットを作成して、リポジトリ内の特定のブランチとタグをユーザーが操作する方法を制御できます。 どのユーザーが特定のブランチにコミットをプッシュできるか、どのユーザーがタグを削除または名前変更できるかといったことを制御できます。 たとえば、リポジトリの feature
ブランチに対して、署名されたコミットを必須とし、リポジトリ管理者を除くすべてのユーザーの強制プッシュをブロックするルールセットを設定できます。
作成するルールセットごとに、リポジトリ内のどのブランチまたはタグにルールセットを適用するかを指定します。 fnmatch
構文を使用して、特定のブランチとタグを対象とするパターンを定義できます。 たとえば、パターン releases/**/*
を使用すると、リポジトリ内の名前が文字列 releases/
で始まるすべてのブランチを対象とすることができます。 fnmatch
の構文について詳しくは、「リポジトリのルールセットの作成」を参照してください。
プッシュ ルールセット
プッシュ ルールセットを使用すると、ファイル拡張子、ファイル パスの長さ、ファイルとフォルダーのパス、ファイル サイズに基づいて、プライベート リポジトリまたは内部リポジトリとそのリポジトリのフォーク ネットワーク全体へのプッシュをブロックできます。
プッシュルールはリポジトリへのすべてのプッシュに適用されるため、ブランチのターゲット設定は必要ありません。
プッシュ ルールセットを使用すると、次のことができるようになります。
-
ファイル パスを制限する: 指定したファイル パスに変更を含むコミットがプッシュされないようにします。
これには
fnmatch
の構文を使用できます。 たとえば、test/demo/**/*
を対象とする制限により、test/demo/
ディレクトリ内のファイルまたはフォルダーへのプッシュが禁止されます。test/docs/pushrules.md
を対象とした制限により、test/docs/
ディレクトリ内のpushrules.md
ファイルへのプッシュが禁止されます。 詳しくは、「リポジトリのルールセットの作成」を参照してください。 -
ファイル パスの長さを制限する: 指定した文字制限を超えるファイル パスを含むコミットがプッシュされないようにします。
-
ファイル拡張子を制限する: 指定したファイル拡張子を持つファイルを含むコミットがプッシュされないようにします。
-
ファイル サイズを制限する: 指定したファイル サイズの制限を超えるコミットがプッシュされないようにします。
フォークされたリポジトリのプッシュ ルールセットについて
プッシュ ルールは、リポジトリのフォーク ネットワーク全体に適用され、リポジトリへのすべてのエントリ ポイントが確実に保護されます。 たとえば、プッシュルールセットが有効になっているリポジトリをフォークした場合、フォークされたリポジトリにも同じプッシュルールセットが適用されます。
フォークされたリポジトリの場合、プッシュ ルールのバイパス アクセス許可を持つユーザーは、ルート リポジトリのバイパス アクセス許可を持つユーザーだけです。
ルールセットと保護されたブランチについて
ルールセットは、リポジトリのブランチ保護ルールと連携して機能します。 ルールセットで定義できるルールの多くは保護ルールに似ており、既存の保護ルールをオーバーライドせずにルールセットの使用を開始できます。
ルールセットには、ブランチ の保護ルールよりも優れた次の利点があります。
- 保護ルールとは異なり、複数のルールセットを同時に適用できるため、リポジトリ内のブランチを対象とするすべてのルールが、誰かがそのブランチを操作したときに評価されることを確信できます。 「ルールの階層化について」を参照してください。
- ルールセットには状態があるため、ルールセットを削除しなくても、リポジトリでどのルールセットをアクティブにするかを簡単に管理できます。
- リポジトリへの読み取りアクセス権を持つユーザーは、リポジトリのアクティブなルールセットを表示できます。 これは、開発者がルールに抵触した理由を理解できること、または監査担当者がリポジトリへの管理者アクセス権を必要とせずに、リポジトリのセキュリティ制約を確認できることを意味します。
- コミット メッセージや作成者のメール アドレスなど、リポジトリに入力するコミットのメタデータを制御する追加のルールを作成できます。 GitHub Enterprise Cloudドキュメントの「ルールセットで使用できるルール」を参照してください。
ルールセットの適用ステータスの使用
ルールセットの作成または編集中に、適用ステータスを使用してルールセットの適用方法を構成できます。
ルールセットには、次の適用ステータスのいずれかを選択できます。
- アクティブ: ルールセットは作成時に適用されます。
- 無効: ルールセットは、適用されません。
ルールの階層化について
ルールセットに優先順位はありません。 代わりに、リポジトリ内の同じブランチまたはタグが複数のルールセットの対象になっている場合、これらの各ルールセットのルールが集約されます。 集約されたルールセット間で同じルールに異なる定義がある場合、最も制限の厳しいバージョンのルールが適用されます。 ルールセットは、互いに階層化するだけでなく、同じブランチまたはタグを対象とする保護ルールとの階層化もできます。
たとえば、octo-org/octo-repo
リポジトリの my-feature
ブランチについて、次のような状況を考えてみましょう。
- リポジトリの管理者が、
my-feature
ブランチを対象とするルールセットを設定しました。 このルールセットは、署名されたコミットと、マージ前に pull request に対する 3 回のレビューを必須とします。 my-feature
ブランチには既存のブランチ保護ルールがあり、直線状のコミット履歴と、マージ前に pull request に対する 2 回のレビューが必須となっています。
それぞれのソースのルールが集約され、すべてのルールが適用されます。 同じルールの複数の異なるバージョンが存在する場合、ルールの最も制限の厳しいバージョンが適用されます。 そのため、my-feature
ブランチでは、署名されたコミットと直線状のコミット履歴が必須であり、このブランチをターゲットとする pull request にはマージ前にレビューが 3 回必要です。