Git Course 0%

Collaborators, permissions, visibility

Beginner GitHub UI ≈ 10 min

What you will learn

  • What Read, Triage, Write, Maintain and Admin each allow
  • Which role a non-developer contributor actually needs
  • What public, private and internal mean, and who can see a fork

After this lesson you can

  • I can ask for the right role with the right words, and explain why more would be wrong

Why this matters

"I can't push" and "I can't see it" are the two most common blockers for someone new to a team, and both are one sentence to fix if you know the vocabulary. Roles are also the reason a merge button is greyed out, which is worth understanding before assuming something is broken.

The five roles

GitHub repository roles, least to most access A ladder of five repository roles from Read at the bottom to Admin at the top: Read, Triage, Write, Maintain, Admin. Read clones and comments. Triage manages issues and pull requests without pushing. Write pushes branches, opens and merges pull requests and creates releases, which is the role a documentation contributor needs. Maintain edits the repository description and pushes to protected branches but cannot manage rulesets. Admin manages rulesets, collaborators and security, and is the only role that can delete or transfer the repository. Read clone, comment, open issues and pull requests Triage + label, assign, close and reopen; still no push Write + push branches, merge pull requests, create releases Maintain + edit the description, push to protected branches Admin + rulesets, collaborators, security, delete or transfer ask for this one writers, testers, analysts Each role includes everything below it. Maintain is not Admin: managing rulesets and collaborators is Admin only.
Read, Triage, Write, Maintain, Admin. Each includes everything below it.
Role Adds
Read Clone and pull, open issues and pull requests, comment, view rulesets
Triage Label, assign, close and reopen issues and pull requests, mark duplicates; still cannot push
Write Push branches, merge pull requests, create releases, manage Actions runs
Maintain Edit the repository description and topics, push to protected branches, manage some settings
Admin Manage rulesets, collaborators and teams, security features, transfer or delete the repository

Two boundaries are worth memorising because they surprise people:

  • Write is the contributor role. Pushing a branch, opening a pull request and merging one all sit here. A writer, tester or analyst who contributes changes needs Write, not Admin.
  • Maintain is not Admin. Maintain can push to protected branches but cannot manage branch protection or rulesets, manage collaborators, or delete the repository. Those are Admin only.

Enterprise organizations can define custom roles built on one of these, so a real organization may show a name that is not in the table. It still inherits from one of the five.

Asking for access

Say what you need to do, not which button you want:

"I'm documenting the installation guide. Could I have Write on trailguide, ideally through the docs team? I don't need to push to main; a branch and a pull request is all I need."

That sentence gets a fast yes because it names a role, a reason, a route and a limit. Compare with "can you give me admin", which gets a slow no.

If Write is refused, the fork route works with Read alone: fork, push to your fork, open a pull request from it (lesson 7.7). That is how open-source contribution works and it is a perfectly good answer.

Visibility

Visibility Who can see it
Public Anyone on the internet, signed in or not
Private Only people and teams given access
Internal Every member of the enterprise, but nobody outside; enterprise accounts only

Changing visibility is an Admin action with consequences worth knowing: making a repository private removes existing forks from public view but does not delete them, and making one public exposes its whole history, including anything committed and later removed (lesson 8.7).

Where access comes from

Four routes into one repository, and it is worth knowing which one is yours:

  1. Organization owner, who has Admin everywhere.
  2. A team's role, the usual route in a healthy organization.
  3. A direct collaborator, added to that repository alone.
  4. Base permissions, an organization-wide default role every member has on every repository.

When routes disagree, the most permissive wins, which is why an organization's base permission set to Write is a bigger decision than it looks.

How to do it

Git tells you what you have the moment you try to use it:

Output
remote: Permission to northwind-trails/trailguide.git denied to chloe.
fatal: unable to access 'https://github.com/northwind-trails/trailguide.git/': The requested URL returned error: 403

That is a permissions answer, not an authentication one: you signed in successfully and were told no. A Repository not found message on a repository you know exists usually means the opposite, that your credentials are wrong or the repository is private and invisible to you (lesson 8.4).

Common mistakes

  • Asking for Admin when Write is what the work needs. It slows the request and widens the blast radius.
  • Assuming Maintain can change branch protection. It cannot; that is Admin.
  • Adding people directly to repositories instead of to teams, so access is invisible in aggregate.
  • Treating private as secret. Everyone with Read has the entire history.
  • Making a repository public without an audit of what is in its history.

Try it yourself

Goal: know your own access and practise asking for the right thing.

  1. On a repository you contribute to, work out your role: try Settings (Admin only), look for the Edit pencil on a file, and check whether Merge appears on a pull request.
  2. Write the one-sentence access request from this lesson for a repository where you would need more, naming the role, the reason and the limit.
  3. On your own practice repository, invite a second account (or a colleague) as Read, then change it to Write, and watch what appears for them.
  4. Look at Settings → Rules and note that a Read user can see the rules but not change them.

Expected result: you can name your role from what the interface offers you, and you have a request written in terms of work rather than buttons.

Show solution

Step 1 works because the interface is the permission model made visible: Settings means Admin, an Edit pencil means Write or better, a Merge button on a protected branch means the rules allow you. This is faster than asking, and it is how you diagnose "why can't I do this" without a ticket.

Check yourself

1. Which role does a documentation contributor who works in branches and pull requests need?
2. Which of these can Maintain not do?
3. A repository is private. What follows?

Key terms

Repository (repo) Protected branch Fork