はじめに
GitHub Team または GitHub Enterprise プランのお客様は、organization でルールセットを作成して、ユーザーが organization 内のリポジトリと対話する方法を制御できます。 どのユーザーが特定のブランチにコミットをプッシュできるか、コミットをどのようにフォーマットする必要があるか、どのユーザーがタグを削除または名前変更できるかといったことを制御できます。 また、ユーザーがリポジトリの名前を変更できないようにすることもできます。
また、プライベートまたは内部リポジトリ、およびリポジトリのフォーク ネットワーク全体へのプッシュをブロックするように、プッシュ ルールセットを作成することもできます。 プッシュ ルールセットを使用すると、ファイル拡張子、ファイル パスの長さ、ファイルとフォルダーのパス、およびファイル サイズに基づいてプッシュをブロックできます。
フォークは、アップストリーム リポジトリからブランチまたはタグのルールセットを継承しません。 ただし、組織が所有するフォークは、他のリポジトリと同様に、作成するルールセットの対象となります。
フォークは__、ルート リポジトリからプッシュ ルールセットを継承します。 プッシュ ルールは、リポジトリのフォーク ネットワーク全体に適用され、リポジトリへのすべてのエントリ ポイントが確実に保護されます。 たとえば、プッシュルールセットが有効になっているリポジトリをフォークした場合、フォークされたリポジトリにも同じプッシュルールセットが適用されます。
フォークされたリポジトリの場合、プッシュ ルールのバイパス アクセス許可を持つユーザーは、ルート リポジトリのバイパス アクセス許可を持つユーザーだけです。
事前構築済みのルールセットのインポート
GitHub によって事前構築済みのルールセットの 1 つをインポートするには、「github/ruleset-recipes
」を参照してください 。
JSON ファイルを使って既存のルールセットをインポートできます。 これは、複数のリポジトリまたは組織に同じルールセットを適用する場合に便利です。詳細については、「組織内のリポジトリのルールセットを管理する」を参照してください。
fnmatch
構文の使用
fnmatch
構文を使用 して、ルールセットの作成時にターゲットとするパターンを定義できます。
*
ワイルドカードを使って、任意の文字列に一致させることができます。 GitHub では File::FNM_PATHNAME
フラグを File.fnmatch
構文で使うため、*
のワイルドカードがディレクトリの区切り記号 (/
) と照合されません。 たとえば、qa/*
は、qa/
で始まり、1 つのスラッシュを含むすべてのブランチと照合されますが、qa/foo/bar
とは照合されません。 qa
の後には、qa/**/*
を使用して任意の数のスラッシュを含めることができます。これは、たとえば qa/foo/bar/foobar/hello-world
と一致します。 qa**/**/*
を使い qa
の文字列を拡張して、より包括的にすることもできます。
構文のオプションについて詳しくは、fnmatch のドキュメントを参照してください。
ルールセットの適用ステータスの使用
ルールセットの作成または編集中に、適用ステータスを使用してルールセットの適用方法を構成できます。
ルールセットには、次の適用ステータスのいずれかを選択できます。
- アクティブ: ルールセットは作成時に適用されます。
- 無効: ルールセットは、適用されません。
分岐またはタグルールセットの作成
-
GitHub の右上隅でプロフィール写真を選んでから、 [Your organizations] をクリックします。
-
組織の隣の [設定] をクリックします。
-
左のサイド バーの [コード、計画、自動化] セクションで、[ リポジトリ] をクリックし、[ルールセット] をクリックします。
-
「新しいルールセット」をクリックします。
-
ブランチを対象とするルールセットを作成するには、 [新しいブランチ ルールセット] をクリックします。 または、タグを対象とするルールセットを作成するには、[新しいタグ ルールセット] をクリックします。
-
[ルールセット名] に、ルールセットの名前を入力します。
-
必要に応じて、既定の適用ステータスを変更するには、 [無効] をクリックし、新しい適用ステータスを選択します。 適用ステータスの詳細については、「ルールセットについて」を参照してください。
組織内でターゲットにするリポジトリの選択
ルールセットを使うと、organization 内のすべてのリポジトリ、特定の名前付け規則と一致する organization 内のリポジトリ、カスタム プロパティを持つ organization 内のリポジトリ、または organization 内の手動で選んだリポジトリ一覧をターゲットすることを選択できます。
カスタム プロパティについて詳しくは、「組織内リポジトリのカスタム プロパティの管理」をご覧ください。
リポジトリが組織レベルで作成されたルールセットのターゲットになっている場合は、組織のオーナーのみがそのルールセットを編集できます。 ただし、リポジトリへの管理者アクセス権を持つユーザー、または "リポジトリ ルールの編集" アクセス許可を含むカスタム ロールを持つユーザーは、リポジトリ レベルで追加のルールセットを作成できます。 これらのルールセット内のルールは、組織レベルで定義されたルールと集約されます。 その結果、新しいルールセットを作成すると、ブランチまたはタグを対象とするルールは、より制限が厳しくなりますが、制限が緩くなることはありません。 ルールセットの作成について詳しくは、「ルールセットについて」をご覧ください。
プロパティに基づいて組織内のリポジトリをターゲットにする
カスタム プロパティに基づいて、組織内のリポジトリをターゲットにすることができます。 「組織内リポジトリのカスタム プロパティの管理」を参照してください。
- プロパティに基づいて organization 内のリポジトリの動的リストをターゲットにするには、[Target repositories] セクションで [Repository targeting criteria] の横にある [Repositories matching a filter] を選びます。
- ターゲットを追加するには、フィルター セクションで、クエリを入力する (例:
visibility:private props.team:infra -language:java
) か、フィルターで選択します。 - 表示されるモーダル ダイアログで、ドロップダウン メニューからカスタムまたはシステム プロパティを選んで、各プロパティの値を選びます。
- [適用] をクリックします。
組織内のすべてのリポジトリをターゲットにする
Organization 内のすべてのリポジトリをターゲットにするには、[Target repositories] セクションで [Repository targeting criteria] の横にある [All repositories] を選びます。
組織内のリポジトリを選択してターゲットにする
- Organization 内の手動で選んだリポジトリの静的なリストをターゲットにするには、[Target repositories] セクションで [Repository targeting criteria] の横にある [Only selected repositories] を選びます。
- ターゲットとするリポジトリを選ぶには、[Targeting criteria] セクションで [ Select repositories] を選んでから、ターゲットとする各リポジトリの名前を検索します。 検索結果から各リポジトリを選びます。
組織内の名前付け規則によるリポジトリのターゲット設定
-
名前付け規則に基づいて organization 内のリポジトリの動的リストをターゲットにするには、[Target repositories] セクションで [Repository targeting criteria] の横にある [Repositories matching a name] を選びます。
-
ターゲット パターンの定義を開始するには、[Targeting criteria] セクションで [Add a target ] を選び、次に [Include by pattern] または [Exclude by pattern] をクリックします。
-
表示されるモーダル ダイアログで、
fnmatch
構文を使ってリポジトリの名前付けパターンを入力し、 [包含パターンの追加] または [除外パターンの追加] をクリックします。fnmatch
の構文について詳しくは、「fnmatch
構文の使用」をご覧ください。メモ
複数のターゲット条件を同じルールセットに追加できます。 たとえば、パターン
*cat*
に一致するリポジトリを含め、さらにパターンnot-a-cat
に一致するリポジトリを明示的に除外できます。 -
必要に応じて、ルールセットの構成ページで [ターゲット リポジトリの名前変更を禁止する] を選びます。
ターゲットにするブランチまたはタグの選択
ブランチまたはタグをターゲットにするには、[ターゲット ブランチ] または [ターゲット タグ] セクションで、[ターゲットの追加] を選び、ブランチまたはタグを含めるまたは除外する方法を選びます。 fnmatch
構文を使って、パターンに基づいてブランチまたはタグを含めたり除外したりできます。 詳細については、「fnmatch
構文の使用」を参照してください。
複数のターゲット条件を同じルールセットに追加できます。 たとえば、既定のブランチを含め、*feature*
のパターンに一致するブランチを含めてから、not-a-feature
のパターンに一致する特定のブランチを除外することができます。
ブランチまたはタグの保護の選択
[ブランチ保護] または [タグ保護] セクションで、ルールセットに含めるルールを選びます。 ルールを選ぶと、そのルールに追加設定を入力できる場合があります。 ルールの詳細については、「ルールセットで使用できるルール」を参照してください。
メモ
[Additional settings] セクションで [Require status checks before merging] をオンにする場合:
- 必須にする各状態チェックの名前を入力できます。 要件としての状態チェックの追加を完了するには、 をクリックする必要があります。
- [マージする前にブランチを最新にする必要がある] をオンにする場合は、保護を有効にするためのチェックを定義する必要があります。
ブランチまたはタグのルール セットの最終処理と次の手順
ルールセットの作成を完了するには、[作成] をクリックします。 ルールセットの適用ステータスが "アクティブ" に設定されている場合、ルールセットはすぐに有効になります。
プッシュ ルールセットの作成
メモ
このルールセットを使うと、リポジトリのフォーク ネットワーク全体にプッシュ制限を適用できます。
Organization 内のプライベート リポジトリまたは内部リポジトリのプッシュ ルールセットを作成できます。
-
GitHub の右上隅でプロフィール写真を選んでから、 [Your organizations] をクリックします。
-
組織の隣の [設定] をクリックします。
-
左のサイド バーの [コード、計画、自動化] セクションで、[ リポジトリ] をクリックし、[ルールセット] をクリックします。
-
「新しいルールセット」をクリックします。
-
ブランチを対象とするルールセットを作成するには、 [新しいプッシュ ルールセット] をクリックします。
-
[ルールセット名] に、ルールセットの名前を入力します。
-
必要に応じて、既定の適用ステータスを変更するには、 [無効] をクリックし、新しい適用ステータスを選択します。 適用ステータスの詳細については、「ルールセットについて」を参照してください。
プッシュ ルールセットに対するバイパス アクセス許可の付与
メモ
リポジトリをターゲットとするプッシュ ルールセットのアクセス許可は、このリポジトリのフォーク ネットワーク全体に継承されます。 つまり、このリポジトリのフォーク ネットワーク全体のリポジトリでこのルールセットをバイパスできる唯一のユーザーが、ルート リポジトリでこのルールセットをバイパスできるユーザーです。
ルールセットに対し、特定のロール、チーム、またはアプリのバイパス アクセス許可を付与できます。 バイパス アクセスの対象になるものを次に示します。
- リポジトリ管理者、organization 所有者、Enterprise 所有者
- 保守ロール、書き込みロール、または書き込みロールに基づくカスタム リポジトリ ロール
- チーム
- GitHub Apps
- Dependabot。 Dependabot の詳細については、「Dependabot クイックスタート ガイド」を参照してください。
- ルールセットに対するバイパス アクセス許可を付与するには、[Bypass list] セクションの [Add bypass] をクリックします。
- 表示される [バイパスの追加] モーダル ダイアログで、バイパスアクセス許可を付与するロール、チーム、またはアプリを検索し、[提案] セクションからロール、チーム、またはアプリを選択し、[選択項目の追加] をクリックします。
組織内でターゲットにするリポジトリの選択
ルールセットを使うと、organization 内のすべてのリポジトリ、特定の名前付け規則と一致する organization 内のリポジトリ、カスタム プロパティを持つ organization 内のリポジトリ、または organization 内の手動で選んだリポジトリ一覧をターゲットすることを選択できます。
カスタム プロパティについて詳しくは、「組織内リポジトリのカスタム プロパティの管理」をご覧ください。
リポジトリが組織レベルで作成されたルールセットのターゲットになっている場合は、組織のオーナーのみがそのルールセットを編集できます。 ただし、リポジトリへの管理者アクセス権を持つユーザー、または "リポジトリ ルールの編集" アクセス許可を含むカスタム ロールを持つユーザーは、リポジトリ レベルで追加のルールセットを作成できます。 これらのルールセット内のルールは、組織レベルで定義されたルールと集約されます。 その結果、新しいルールセットを作成すると、ブランチまたはタグを対象とするルールは、より制限が厳しくなりますが、制限が緩くなることはありません。 ルールセットの作成について詳しくは、「ルールセットについて」をご覧ください。
プロパティに基づいて組織内のリポジトリをターゲットにする
カスタム プロパティに基づいて、組織内のリポジトリをターゲットにすることができます。 「組織内リポジトリのカスタム プロパティの管理」を参照してください。
- プロパティに基づいて organization 内のリポジトリの動的リストをターゲットにするには、[Target repositories] セクションで [Repository targeting criteria] の横にある [Repositories matching a filter] を選びます。
- ターゲットを追加するには、フィルター セクションで、クエリを入力する (例:
visibility:private props.team:infra -language:java
) か、フィルターで選択します。 - 表示されるモーダル ダイアログで、ドロップダウン メニューからカスタムまたはシステム プロパティを選んで、各プロパティの値を選びます。
- [適用] をクリックします。
組織内のすべてのリポジトリをターゲットにする
Organization 内のすべてのリポジトリをターゲットにするには、[Target repositories] セクションで [Repository targeting criteria] の横にある [All repositories] を選びます。
組織内のリポジトリを選択してターゲットにする
- Organization 内の手動で選んだリポジトリの静的なリストをターゲットにするには、[Target repositories] セクションで [Repository targeting criteria] の横にある [Only selected repositories] を選びます。
- ターゲットとするリポジトリを選ぶには、[Targeting criteria] セクションで [ Select repositories] を選んでから、ターゲットとする各リポジトリの名前を検索します。 検索結果から各リポジトリを選びます。
組織内の名前付け規則によるリポジトリのターゲット設定
-
名前付け規則に基づいて organization 内のリポジトリの動的リストをターゲットにするには、[Target repositories] セクションで [Repository targeting criteria] の横にある [Repositories matching a name] を選びます。
-
ターゲット パターンの定義を開始するには、[Targeting criteria] セクションで [Add a target ] を選び、次に [Include by pattern] または [Exclude by pattern] をクリックします。
-
表示されるモーダル ダイアログで、
fnmatch
構文を使ってリポジトリの名前付けパターンを入力し、 [包含パターンの追加] または [除外パターンの追加] をクリックします。fnmatch
の構文について詳しくは、「fnmatch
構文の使用」をご覧ください。メモ
複数のターゲット条件を同じルールセットに追加できます。 たとえば、パターン
*cat*
に一致するリポジトリを含め、さらにパターンnot-a-cat
に一致するリポジトリを明示的に除外できます。 -
必要に応じて、ルールセットの構成ページで [ターゲット リポジトリの名前変更を禁止する] を選びます。
プッシュ保護の選択
ファイル拡張子、ファイル パスの長さ、ファイルとフォルダーのパス、ファイル サイズに基づいて、このリポジトリとこのリポジトリのフォーク ネットワーク全体へのプッシュをブロックできます。
構成したプッシュ保護によって、このリポジトリ内およびこのリポジトリのフォーク ネットワーク全体のプッシュがブロックされます。
-
[プッシュ保護] で、適用する制限をクリックします。 次に、選択した制限の詳細を入力します。
ファイル パスの制限については、部分パスまたは完全パスを使用できます。 これには
fnmatch
の構文を使用できます。 たとえば、test/demo/**/*
を対象とする制限により、test/demo/
ディレクトリ内のファイルまたはフォルダーへのプッシュが禁止されます。test/docs/pushrules.md
を対象とした制限により、test/docs/
ディレクトリ内のpushrules.md
ファイルへのプッシュが禁止されます。 詳しくは、「リポジトリのルールセットの作成」をご覧ください。
プッシュ ルール セットの最終処理と次の手順
ルールセットの作成を完了するには、[作成] をクリックします。 ルールセットの適用ステータスが "アクティブ" に設定されている場合、ルールセットはすぐに有効になります。