Skip to content

Git 权限错误:remote: Write access to repository not granted

当使用 Git 操作远程仓库时,可能会遇到 remote: Write access to repository not granted. fatal: unable to access 错误。这通常意味着当前认证方式没有足够的权限访问或修改目标仓库。

问题原因

此错误常见于以下场景:

  • 使用无效或过期的访问令牌 (PAT)
  • 权限范围配置不正确
  • 仓库访问权限设置问题
  • 认证方式选择错误
  • GitHub Actions 工作流权限不足

解决方案

1. 检查并重新生成访问令牌

访问令牌是最常见的权限问题来源。确保您的令牌具有正确的权限和有效期。

sh
# 访问 https://github.com/settings/tokens
# 选择 "Generate new token" -> "Generate new token (classic)"
# 权限范围至少选择 "repo" (包含读写权限)
# 设置合适的有效期(最长1年)
sh
# 访问 https://github.com/settings/tokens?type=beta
# 选择正确的资源所有者(个人或组织)
# 仓库访问选择 "All repositories" 或指定仓库
# 在 "Repository permissions" -> "Contents" 选择 "Read and write"

WARNING

GitHub 精细令牌 (Fine-grained PAT) 目前仍存在一些兼容性问题。如果遇到问题,建议先使用经典令牌 (Classic PAT)。

2. 更新远程仓库 URL

确保您的远程仓库 URL 包含正确的认证信息:

sh
# 检查当前远程 URL
git remote get-url origin

# 使用 HTTPS 和令牌更新远程 URL
git remote set-url origin https://{您的用户名}:{您的令牌}@github.com/{组织名}/{仓库名}.git

# 或者使用 SSH 方式(需要配置 SSH 密钥)
git remote set-url origin git@github.com:{组织名}/{仓库名}.git

3. 检查仓库权限设置

如果您是组织成员,请确认组织级别的权限设置:

  1. 访问组织设置:组织首页 → Settings → Member privileges
  2. 检查 "Base permissions" 是否包含写入权限
  3. 确认您的账户在特定仓库中具有写入权限

4. 清除已保存的凭据

旧的凭据缓存可能导致认证问题:

sh
# 打开 Keychain Access → 搜索 "github.com"
# 删除相关的登录项
sh
# 打开凭据管理器 → Windows 凭据
# 删除与 GitHub 相关的普通凭据
sh
# 清除所有缓存的凭据
git credential-manager reject https://github.com

5. 配置 GitHub Actions 工作流权限

如果错误出现在 CI/CD 流程中,需要检查工作流权限:

  1. 访问仓库设置:Settings → Actions → General
  2. 在 "Workflow permissions" 部分选择 "Read and write permissions"
  3. 或者在 workflow 文件中明确配置权限:
yaml
permissions:
  contents: write
  packages: write
  issues: write
  pull-requests: write

6. 使用 GitHub CLI 进行认证

GitHub CLI 提供更简便的认证方式:

sh
# 安装 GitHub CLI 后运行
gh auth login

# 按照提示选择认证方式和权限范围

故障排除步骤

遇到权限错误时,建议按以下顺序排查:

  1. 确认仓库访问权限:确保您确实是该仓库的协作者或被授予了写入权限
  2. 检查令牌有效性:令牌是否过期或已被撤销
  3. 验证权限范围:令牌是否包含 repo 权限或相应的精细权限
  4. 清除凭据缓存:删除旧的认证信息避免冲突
  5. 切换认证方式:尝试在 HTTPS 和 SSH 之间切换

INFO

GitHub 于 2021 年 8 月停止了对密码认证的支持,必须使用个人访问令牌或 SSH 密钥进行认证。这是许多用户遇到此问题的根本原因。

总结

remote: Write access to repository not granted 错误通常与认证和权限配置相关。通过正确配置访问令牌、更新远程仓库 URL 和检查权限设置,大多数问题都可以解决。对于组织仓库,还需要确保组织级别的权限设置正确。

如果您仍然遇到问题,建议联系仓库管理员确认您的访问权限,或在 GitHub 社区论坛 寻求帮助。