You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Git向公司远程仓库推送新分支时权限被拒问题求助

解决GitHub公司仓库推送新分支被拒绝的问题

首先明确说:shell访问权限缺失完全不是导致你推送失败的原因——GitHub本来就不会给普通用户提供shell访问,你看到的Hi <username>! You've successfully authenticated, but GitHub does not provide shell access.是所有用户通过SSH验证后的标准反馈,和推送权限没有任何关系,放心排除这个因素。

接下来,结合你能正常克隆、拉取但无法推送的情况,核心问题是你的账号对这个公司仓库没有写入权限,或者本地SSH配置没有正确匹配有权限的账号,下面是具体排查步骤:

1. 确认账号的仓库权限

因为仓库是公司所有的私有库,哪怕你能克隆(只读权限),推送(写入操作)需要仓库管理员给你分配协作者权限,或者把你加入到有该仓库写入权限的团队里:

  • 直接登录GitHub(或公司的GitHub Enterprise),打开这个仓库的页面,查看「Settings」→「Collaborators and teams」,确认你的账号在列表里,且权限是「Write」或更高。
  • 如果不在列表里,联系仓库管理员添加你的账号并分配写入权限。

2. 检查SSH密钥对应的账号是否正确

有时候本地可能配置了多个SSH密钥(比如个人账号和公司账号的密钥),默认使用的密钥对应的账号可能没有公司仓库的权限:

  • 执行ssh -T git@<company username>.com(如果是GitHub Enterprise,替换成对应的域名),返回的<username>是不是公司授权的那个账号?如果显示的是你的个人账号,说明当前用的是个人的SSH密钥,需要切换到公司的密钥。
  • 可以通过修改~/.ssh/config文件来为公司的仓库地址指定专属密钥,示例配置:
    Host <company name>
        HostName <company username>.com
        User git
        IdentityFile ~/.ssh/your_company_ssh_key
    
    配置后重新测试ssh -T git@<company name>,确认返回的是公司授权的账号。

3. 验证远程仓库地址是否正确

虽然git remote -v显示了地址,但还是要确认这个地址对应的仓库是你要操作的那个:

  • 复制git@<company name>:xxx.git里的路径,在GitHub上打开对应的仓库页面,确认仓库存在且是你要推送的目标仓库,有没有可能仓库名拼写错误或者组织名不对?

4. 排查分支保护规则(可选)

部分公司仓库会设置严格的分支保护规则,比如禁止直接推送新分支(要求通过PR创建),或者对分支命名有要求:

  • 登录仓库页面,查看「Settings」→「Branches」里的分支保护规则,确认是否允许直接推送新分支,或者你的分支命名是否符合规则。

5. 临时用HTTPS方式测试推送(辅助排查)

把远程仓库地址临时改成HTTPS格式,执行:

git remote set-url origin https://<company username>.com/<company name>/xxx.git

然后尝试推送,如果需要输入账号密码,输入公司授权的账号信息,如果能推送成功,说明问题出在SSH密钥的配置上;如果还是失败,那肯定是账号没有写入权限,联系管理员解决即可。

测试完可以改回SSH地址:

git remote set-url origin git@<company name>:xxx.git

内容的提问来源于stack exchange,提问作者Liu

火山引擎 最新活动