GitHub Teams: hierarchy, repository access and permissions
GitHub Teams should make repository access easier to explain: which team owns a repo, which permission it has, and which access a child team inherits from its parent.
Keep the hierarchy shallow and attach access deliberately
- Child teams inherit repository access from parent teams.
- Give a parent only the permissions that are safe for every child.
- Add narrower or higher access lower in the hierarchy where it is needed.
How GitHub Team hierarchy affects repository access
A child team receives repository access granted to its parent. A direct grant to the child can add access for a narrower group without widening the parent. Effective permission can therefore come from more than one place.
- Parent grant: inherited by every child team below it.
- Direct child grant: applies to that child and its descendants.
- Effective permission: the strongest access available after direct and inherited paths are considered.
- Removing inherited access: requires changing the parent source; the child cannot discard it alone.
Worked inheritance example
-
Parent team
Engineering
Read on
service-catalog -
Inherited access
Platform
Inherits Read on
service-catalog -
Direct child grant
Platform
Write on
deployment-controller
| Team | Repository | Grant source | Effective access |
|---|---|---|---|
Engineering | service-catalog | Direct Read grant | Read |
Platform | service-catalog | Inherited from Engineering | Read |
Platform | deployment-controller | Direct Write grant | Write |
Platform reads service-catalog because its parent can. It writes to deployment-controller because that narrower grant is attached directly to Platform. Removing the inherited access requires changing the grant on Engineering.
What GitHub Teams should represent
Teams are both collaboration groups and the normal unit for repository permissions. A useful team model answers an ownership question: which group operates this repository, and what level of access does that group need?
Keep universal membership separate from ownership. An everyone team should normally sit alongside departments and contractors, not above every other team where its permissions would cascade through the company.
everyone
engineering
+-- engineering-platform
+-- engineering-backend
`-- engineering-frontend
product
operations
security
contractors
Nest squads or specialties under real departments and domains. Shallow hierarchy usually beats a complete-looking org chart that nobody can audit without tracing a long inheritance chain.
Repository roles and where to assign them
| Role | Typical use | Review signal |
|---|---|---|
| Read | People who need to inspect code without changing it. | Is broad visibility intentional for this repository? |
| Triage | Issue and pull-request coordination without push access. | Would Triage meet the need instead of Write? |
| Write | Day-to-day contributors who push code. | Does the team actively contribute to this repository? |
| Maintain | Maintainers responsible for repository operations. | Can the responsibility be explained and reviewed? |
| Admin | Rare owners or platform cases needing full control. | Is destructive and security-sensitive access justified? |
If a person has a recurring direct grant that mirrors a role, turn that pattern into a team. The GitHub Direct access vs Organization access guide explains that decision in detail.
GitHub Teams audit checklist
- List every parent team with repository access.
- Confirm each parent grant is safe for all child-team members.
- Trace Maintain and Admin access back to its direct or inherited source.
- Move narrower access to the child or ownership team that actually needs it.
- Keep contractors and vendors out of broad employee groups by default.
- Replace recurring direct-user exceptions with a team where the role is durable.
Common GitHub Teams questions
Do child GitHub teams inherit repository permissions?
Yes. A repository grant on a parent team reaches the child teams beneath it.
Can a child team have more access than its parent?
Yes. Keep the parent permission safe for the whole branch, then grant a stronger permission directly to the narrower child team.
How do you remove inherited repository access?
Change or remove the repository permission on the parent team that supplies it.
Should an everyone team be a parent?
Usually no. Keep broad membership separate from ownership teams so access does not cascade into every functional group.
Review the live hierarchy before changing it
repod shows team structure, inherited and direct repo mappings, high-privilege teams, and uncovered private repositories in one place before you apply changes.
Related guides
- Private GitHub repository visibility
- GitHub repository permissions audit checklist
- GitHub governance and permission drift guide