GitHub私有仓库HTTPS连接失败,SSH可行,求助问题排查与修复方案
分析HTTPS方式推送失败的原因及修复方案
我来帮你拆解这两个HTTPS推送失败的问题,以及对应的解决办法:
1. 错误:Error: Repository not found
这个错误看起来是仓库找不到,但实际上大多是认证权限问题或者地址错误:
- 可能原因:
- 你复制的HTTPS地址有误,比如少了仓库名、拼写错误,或者把私有仓库的地址和公开仓库搞混了。
- Git本地存储的GitHub凭证过期或不正确,导致GitHub拒绝你的访问,但返回的提示是“仓库找不到”(这是GitHub的一种权限保护策略)。
- 当前使用的GitHub账号没有该私有仓库的读写权限,比如你用了A账号的凭证,但仓库是B账号创建的,且没添加A为协作者。
- 修复方法:
- 先检查远程仓库地址:执行
git remote -v查看当前的远程地址,和GitHub仓库页面上的HTTPS地址对比,如果不一致,用git remote set-url origin <正确的HTTPS地址>更新。 - 重置Git凭证:
- Windows:打开「控制面板→用户账户→凭据管理器→Windows凭据」,找到GitHub相关的条目删除,重新执行
git push,会提示你输入用户名和个人访问令牌(PAT)(GitHub现在已经不支持密码登录,必须用PAT)。 - Mac:在终端执行
git credential-osxkeychain erase,然后按提示输入host=github.com和protocol=https,回车删除凭证,再重新push输入PAT。 - Linux:执行
git credential-cache exit清除缓存的凭证,重新push输入PAT。
- Windows:打开「控制面板→用户账户→凭据管理器→Windows凭据」,找到GitHub相关的条目删除,重新执行
- 确认权限:登录GitHub,进入该私有仓库的「Settings→Collaborators and teams」,检查当前账号是否在协作列表里,没有的话让仓库所有者添加你。
- 先检查远程仓库地址:执行
2. 错误:Failed to connect to github.com port 443 : Connection Refused
这个是典型的网络连接问题:
- 可能原因:
- 本地防火墙、杀毒软件拦截了443端口的出站请求(HTTPS默认用443端口)。
- Git配置了错误的代理,或者代理服务已经失效,导致无法通过代理连接GitHub。
- 本地网络限制了对GitHub的访问,比如DNS解析失败,或者IP被屏蔽。
- 修复方法:
- 临时关闭防火墙/杀毒软件:如果关闭后能成功push,说明是它们拦截了连接,需要在软件里添加Git的允许规则。
- 检查并清理代理配置:
- 执行
git config --global --get http.proxy和git config --global --get https.proxy,如果输出了代理地址但你不需要代理,用git config --global --unset http.proxy和git config --global --unset https.proxy清除。 - 如果需要代理,确认代理地址和端口正确,并且代理能正常访问GitHub(可以用浏览器测试代理是否能打开GitHub)。
- 执行
- 修改hosts文件:
- 先ping github.com获取可用的IP(或者查GitHub官方公布的IP段),比如得到
140.82.113.4。 - 修改本地hosts文件:Windows在
C:\Windows\System32\drivers\etc\hosts,Mac/Linux在/etc/hosts,添加一行140.82.113.4 github.com,保存后刷新DNS(Windows执行ipconfig /flushdns,Mac/Linux执行sudo dscacheutil -flushcache),再尝试push。
- 先ping github.com获取可用的IP(或者查GitHub官方公布的IP段),比如得到
为什么SSH方式能成功?
SSH用密钥对进行认证,不需要输入用户名和令牌,避开了HTTPS的凭证存储问题;同时SSH默认用22端口,很多网络环境下22端口的限制比443少,所以能绕过你的网络连接问题。
内容的提问来源于stack exchange,提问作者Edmonds Karp




