Branch Protection Controls
Branch protection controls for GitHub/GitLab repositories
- ID
- repo-branch-protection
- Version
- dev-20260527
- Gemara version
- 1.1.0
- Author
- ComplyTime
Source Code Protection
Controls for protecting source code repositories via branch protection rules
BP-1 Require Pull Request Reviews
Objective
Ensure changes to protected branches go through a pull request process
Assessment requirements
Direct pushes to protected branches MUST be blocked
Applicability: github-repos, gitlab-repos
BP-2 Require Minimum Approvals
Objective
Pull requests to protected branches must have a minimum number of approvals
Assessment requirements
Pull requests must require a minimum number of approvals
Applicability: github-repos, gitlab-repos
BP-3 Restrict Force Pushes
Objective
Force pushes to protected branches must be blocked
Assessment requirements
Force pushes to protected branches must be blocked
Applicability: github-repos, gitlab-repos
BP-4 Prevent Admin Bypass
Objective
Admin bypass of branch protection rules must be prevented
Assessment requirements
Admin bypass prevention must be enabled on protected branches
Applicability: github-repos, gitlab-repos
BP-5 Require Code Owner Review
Objective
Code owner review must be required when CODEOWNERS file exists
Assessment requirements
Code owner review requirements must be enabled
Applicability: github-repos, gitlab-repos
# Branch Protection Controls
Version: dev-20260527
_Branch Protection Controls_ is a Gemara 1.1.0 ControlCatalog by ComplyTime (Software Assisted, `complytime`).
### Description
Branch protection controls for GitHub/GitLab repositories
### Requirement Applicability Groups
The following groups are used to specify the circumstance within which an assessment requirement is mandated.
- **github-repos** — GitHub Repositories: GitHub-hosted source code repositories
- **gitlab-repos** — GitLab Repositories: GitLab-hosted source code repositories
_Summary: 5 control(s), 5 assessment requirement(s)._
## Table of contents
- [Source Code Protection](#source-code)
- [BP-1: Require Pull Request Reviews](#bp-1-require-pull-request-reviews)
- [BP-2: Require Minimum Approvals](#bp-2-require-minimum-approvals)
- [BP-3: Restrict Force Pushes](#bp-3-restrict-force-pushes)
- [BP-4: Prevent Admin Bypass](#bp-4-prevent-admin-bypass)
- [BP-5: Require Code Owner Review](#bp-5-require-code-owner-review)
## source-code: Source Code Protection
Controls for protecting source code repositories via branch protection rules
### BP-1: Require Pull Request Reviews
**Objective**
Ensure changes to protected branches go through a pull request process
#### BP-1.01
Direct pushes to protected branches MUST be blocked
**Applicability:** github-repos, gitlab-repos
### BP-2: Require Minimum Approvals
**Objective**
Pull requests to protected branches must have a minimum number of approvals
#### BP-2.01
Pull requests must require a minimum number of approvals
**Applicability:** github-repos, gitlab-repos
### BP-3: Restrict Force Pushes
**Objective**
Force pushes to protected branches must be blocked
#### BP-3.01
Force pushes to protected branches must be blocked
**Applicability:** github-repos, gitlab-repos
### BP-4: Prevent Admin Bypass
**Objective**
Admin bypass of branch protection rules must be prevented
#### BP-4.01
Admin bypass prevention must be enabled on protected branches
**Applicability:** github-repos, gitlab-repos
### BP-5: Require Code Owner Review
**Objective**
Code owner review must be required when CODEOWNERS file exists
#### BP-5.01
Code owner review requirements must be enabled
**Applicability:** github-repos, gitlab-repos
{
"catalog": {
"groups": [
{
"class": "family",
"controls": [
{
"class": "source-code",
"controls": [
{
"id": "BP-1.01",
"parts": [
{
"id": "BP-1.01_smt",
"name": "statement",
"prose": "Direct pushes to protected branches MUST be blocked"
},
{
"id": "BP-1.01_obj",
"links": [
{
"href": "#BP-1.01_smt",
"rel": "assessment-for"
}
],
"name": "assessment-objective"
}
],
"title": "BP-1.01"
}
],
"id": "BP-1",
"parts": [
{
"id": "BP-1_smt",
"name": "statement",
"prose": "Ensure changes to protected branches go through a pull request process"
}
],
"title": "Require Pull Request Reviews"
},
{
"class": "source-code",
"controls": [
{
"id": "BP-2.01",
"parts": [
{
"id": "BP-2.01_smt",
"name": "statement",
"prose": "Pull requests must require a minimum number of approvals"
},
{
"id": "BP-2.01_obj",
"links": [
{
"href": "#BP-2.01_smt",
"rel": "assessment-for"
}
],
"name": "assessment-objective"
}
],
"title": "BP-2.01"
}
],
"id": "BP-2",
"parts": [
{
"id": "BP-2_smt",
"name": "statement",
"prose": "Pull requests to protected branches must have a minimum number of approvals"
}
],
"title": "Require Minimum Approvals"
},
{
"class": "source-code",
"controls": [
{
"id": "BP-3.01",
"parts": [
{
"id": "BP-3.01_smt",
"name": "statement",
"prose": "Force pushes to protected branches must be blocked"
},
{
"id": "BP-3.01_obj",
"links": [
{
"href": "#BP-3.01_smt",
"rel": "assessment-for"
}
],
"name": "assessment-objective"
}
],
"title": "BP-3.01"
}
],
"id": "BP-3",
"parts": [
{
"id": "BP-3_smt",
"name": "statement",
"prose": "Force pushes to protected branches must be blocked"
}
],
"title": "Restrict Force Pushes"
},
{
"class": "source-code",
"controls": [
{
"id": "BP-4.01",
"parts": [
{
"id": "BP-4.01_smt",
"name": "statement",
"prose": "Admin bypass prevention must be enabled on protected branches"
},
{
"id": "BP-4.01_obj",
"links": [
{
"href": "#BP-4.01_smt",
"rel": "assessment-for"
}
],
"name": "assessment-objective"
}
],
"title": "BP-4.01"
}
],
"id": "BP-4",
"parts": [
{
"id": "BP-4_smt",
"name": "statement",
"prose": "Admin bypass of branch protection rules must be prevented"
}
],
"title": "Prevent Admin Bypass"
},
{
"class": "source-code",
"controls": [
{
"id": "BP-5.01",
"parts": [
{
"id": "BP-5.01_smt",
"name": "statement",
"prose": "Code owner review requirements must be enabled"
},
{
"id": "BP-5.01_obj",
"links": [
{
"href": "#BP-5.01_smt",
"rel": "assessment-for"
}
],
"name": "assessment-objective"
}
],
"title": "BP-5.01"
}
],
"id": "BP-5",
"parts": [
{
"id": "BP-5_smt",
"name": "statement",
"prose": "Code owner review must be required when CODEOWNERS file exists"
}
],
"title": "Require Code Owner Review"
}
],
"id": "source-code",
"title": "Controls for protecting source code repositories via branch protection rules"
}
],
"metadata": {
"last-modified": "2026-07-23T09:37:27.948012504Z",
"oscal-version": "1.1.3",
"parties": [
{
"name": "ComplyTime",
"type": "person",
"uuid": "991df7f4-552d-4966-b700-73b443c11ab0"
}
],
"responsible-parties": [
{
"party-uuids": [
"991df7f4-552d-4966-b700-73b443c11ab0"
],
"role-id": "author"
}
],
"roles": [
{
"description": "Author and owner of the document",
"id": "author",
"title": "Author"
}
],
"title": "Branch Protection Controls",
"version": "dev-20260527"
},
"uuid": "1f2cd437-2c5d-47bf-bec2-6d84acf79741"
}
}