403 Forbidden错误表明服务器确认身份但拒绝推送权限,主因是权限不足、凭据失效、URL协议混用或分支保护规则限制。

权限问题不是“输错密码”就能概括的,它通常意味着 Git 已确认你是谁,但服务器明确拒绝你执行 push 操作。核心判断标准是:能 git clone 和 git fetch,但 git push 失败,且错误里带 403 Forbidden、Permission denied 或 Authentication failed。
检查远程 URL 协议是否混用或损坏
同一仓库不能一边用 HTTPS 一边用 SSH;URL 中也不能含非法字符(比如方括号 []、多余空格、中文路径)。这类问题会导致 Git 根本无法发起有效认证请求。
- 运行
git remote -v查看当前配置,确认 fetch 和 push 地址协议一致(都是https://或都是git@) - 若 URL 显示为
https://[gitcode.net]/user/repo.git,立刻删掉方括号:git remote set-url origin https://gitcode.net/user/repo.git - HTTPS 地址必须以
https://开头,SSH 地址必须形如git@gitcode.net:user/repo.git;混用或格式错误会直接触发protocol 'https' is not supported
验证凭据是否被缓存或过期
Git 凭据管理器(尤其是 Windows 的 Credential Manager 或 macOS 的 Keychain)常缓存旧用户名/密码或已失效的 Personal Access Token(PAT),导致后续 push 总是复用错误凭据。
- 先清空缓存:
git credential reject,然后输入两行(注意空行):protocol=httpshost=gitcode.net - Windows 用户还需手动打开「控制面板 → 用户账户 → 凭据管理器」,删除所有含
gitcode或github的 Windows 凭据 - 改用 PAT 替代密码:在 GitCode 设置页生成新 token,push 时密码栏粘贴该 token(不是密码,也不是邮箱)
确认分支保护规则与你的角色权限匹配
即使账号登录成功、凭据有效,main 或 master 这类主分支可能被设为“仅维护者可推送”。此时报错通常是 error:无法推送至保护分支'main',而非认证类错误。
- 登录 GitCode 网页端 → 进入项目
Settings → Branch Protection Rules→ 查看main分支的Allow force pushes和Require pull request reviews是否开启 - 同时检查
Settings → Members,确认你的角色是Maintainer(维护者)而非Developer(开发者) - 若权限不足,不要尝试
git push -f强推——这会被保护规则拦截,且违反协作规范;应创建新分支(如feat/login)并提 Pull Request
排查 .git 目录所有权和文件权限
Linux/macOS 下,如果 .git 子目录或其中文件的所有者是 root,而你用普通用户执行 git push,Git 可能因无法读取内部引用而静默失败,或触发 detected dubious ownership 报错。
- 运行
ls -la .git,观察输出中所有者列是否为你当前用户名;若出现root,说明之前误用sudo git初始化或操作过 - 修复命令:
sudo chown -R $USER:$USER .git(递归修正整个.git目录) - 再运行
git config --global --add safe.directory $(pwd),告诉 Git 信任当前工作目录(适用于较新 Git 版本)
真正卡住人的往往不是“不知道怎么配 SSH”,而是凭据缓存在后台偷偷作祟,或者分支保护规则在网页端改了但没人通知你。每次 push 失败,先跑一遍 git remote -v 和 ssh -T git@gitcode.net(或对应平台域名),比反复重输密码更省时间。


















