VSCode向GitHub发布分支遇认证失败及.git后缀异常求助
问题详情
原始问题
已配置VSCode通过SSH访问网站服务器仓库,可正常修改服务器代码,但尝试通过VSCode的「Publish Branch」功能向GitHub发布分支时弹出错误窗口。GitHub上已创建对应名称的空仓库,但无文件上传。Git日志输出:
remote: Repository not found. fatal: Authentication failed for 'https://github.com/DrunkenTyromancer/domainname.ext.git/'
且远程地址被自动添加了.git后缀,不符合预期。有以下疑问:
- 为何远程地址会自动添加
.git后缀? - 如何分步解决该问题?(仍在学习阶段)
- 认证失败是否还有其他原因(如SSH密钥对配置错误)?
补充:可通过VSCode编辑服务器代码,也能通过GitHub Desktop从服务器拉取代码,但无法通过VSCode向GitHub发布分支作为备份及协作仓库。原本预期「Publish Branch」功能会将本地仓库/home/accountname/public_html/projectname/发布到GitHub仓库GitHubUserName/projectname/,而非GitHubUserName/projectname.git/,且若GitHub已创建对应仓库,不应出现认证失败的报错。
更新记录
更新1
移除了远程地址中的.git后缀,重新添加远程URL后,收到提示:Please make sure you have the correct access rights and the repository exists. Git日志显示相关命令执行记录。
更新2
在生产服务器上添加了部署密钥对,并将公钥复制到GitHub(也添加到了本地笔记本的SSH密钥存储中),但出现新报错;创建分支副本后又出现另一个报错。认为针对新手的相关文档需要优化。
解答
1. 远程地址自动添加.git后缀的原因
.git是Git远程仓库的标准后缀,GitHub的仓库底层都是用带这个后缀的地址完成数据传输——哪怕网页上显示的仓库地址不带后缀,Git实际交互时也会默认补全。VSCode的「Publish Branch」基于Git核心逻辑实现,所以自动加后缀属于正常行为,不会影响仓库的访问和操作,无需纠结这个点。
2. 分步解决认证失败问题
步骤1:确认远程仓库URL正确性
先检查当前远程地址是否正确:
- 进入本地仓库目录,执行命令查看远程地址:
git remote -v - 如果地址错误,先移除旧远程,再添加正确的SSH格式地址(推荐用SSH,避免HTTPS的认证坑):
git remote remove origin git remote add origin git@github.com:你的GitHub用户名/仓库名.git
步骤2:验证SSH密钥有效性
既然配置了SSH密钥,先测试能否正常连接GitHub:
- 执行测试命令:
ssh -T git@github.com - 如果返回
Hi 你的用户名! You've successfully authenticated, but GitHub does not provide shell access.,说明密钥没问题;如果报错,检查这几点:- 服务器上的私钥权限必须设为
600(执行chmod 600 ~/.ssh/id_rsa修改) - GitHub上的公钥和服务器生成的完全一致(用
cat ~/.ssh/id_rsa.pub查看公钥内容对比) - 本地笔记本的SSH代理已加载密钥(执行
ssh-add -l查看已加载的密钥列表)
- 服务器上的私钥权限必须设为
步骤3:检查仓库权限与名称
- 确认你在GitHub上有该仓库的写入权限(个人仓库默认有,组织仓库需管理员分配)
- 仓库名称要完全匹配,包括大小写(GitHub仓库名称区分大小写)
步骤4:重新尝试推送
完成上述步骤后,要么在VSCode里重新点击「Publish Branch」,要么用终端手动推送:
git push -u origin 你的分支名
3. 认证失败的其他可能原因
- HTTPS缓存冲突:如果之前用HTTPS访问过GitHub,Git可能缓存了旧的认证信息,导致SSH连接失败。清除缓存:
git config --global --unset credential.helper - 部署密钥权限限制:部署密钥默认是只读的,如果要推送代码,必须在GitHub添加密钥时勾选「Allow write access」
- VSCode SSH配置问题:VSCode的远程SSH配置可能未指定正确的密钥路径,可在
~/.ssh/config里添加:Host 服务器别名 HostName 服务器IP/域名 User 服务器用户名 IdentityFile ~/.ssh/你的密钥文件名
内容的提问来源于stack exchange,提问作者Mr.President

