# Github Access

There are two types of Github access described here, with different powers & responsibilities. Only ask for access if you're an active member of the community. New contributors should participate in the Github & Gerrit review process for some time before requesting access. See https://golang.org/wiki/Gardening.

(For Gerrit access, see https://golang.org/wiki/GerritAccess)

## Assignees

The "go-assignees" group is a read-only group granting no special access, other than it allows the users in the group to be assigned issues.

In general, Go doesn't use the "Assigned to" field of bugs much. Instead, we just leave a comment saying we'll work on it. But if you want this access, reference https://github.com/orgs/golang/teams/go-assignees and your Github username in your email requesting access.

## Editors

The poorly named "go-approvers" group is the set of people who can edit metadata on issues.

To request this type of access, reference https://github.com/orgs/golang/teams/go-approvers and your Github username in your email requesting access.

Please do not edit any field you're not confident about. Feel free to ask for second opinions.

## Requesting Access

To get request either of the access types above, file a bug (https://github.com/golang/go/issues/new?title=access:+&body=See+https://golang.org/wiki/GithubAccess) and list and state which access you want (its name and group URL).

## Once you have access

Go help garden! See https://golang.org/wiki/Gardening.