git push 报 HTTP Basic: Access denied 错误

961 阅读2分钟

网上一搜一大堆重复的信息,一个都没有解决我的问题。。。 索性整理一下自己的解决方法,希望能给遇到相同问题的同学一点参考。

git remote

让我们从头说起,首先要参与任何一个Git项目的协作,必须要了解该如何管理远程仓库。远程仓库是指托管在网络上的项目仓库,可能会有好多个,其中有些你只能读,有些可以写。同他人协作开发某个项目时,需要管理这些远程仓库,以便推送或拉取数据,分享各自的工作进展。管理远程仓库的工作,包括添加远程仓库,移除废弃的远程库,管理各式远程库分支,定义是否跟踪这些分支等等。

问题

回到我们的问题,git push 到远程分支报HTTP Basic: Access denied,如下图,而让人摸不着头脑的是,在这之前是成功的,what???

fix

一个Git项目,通常有两种clone方式,分别是ssh和http的方式,坑就在这里,http方式中有http和https,像有些公司内如gitlab上,用的就是http,比如我们公司,而我出现这个问题恰巧就是公司把http升级成https...这或许才是access denied的真正原因?

  • 查看当前远程库

git remote命令管理一组跟踪的存储库,可以查看当前配置有哪些远程仓库,它会列出每个远程库的简短名字。在克隆完某个项目后,至少可以看到一个名为origin的远程库,git默认使用这个名字来标识你所克隆的原始仓库,比如在我当前项目中输入如下代码:

$ git remote -v
origin  http://git.demo.com/aer/sample.git (fetch)
origin  http://git.demo.com/aer/sample.git (push)

很显然,远程库对应的url是http协议的地址,而项目却是https和ssh的,报错也就毫无疑义了。所以接下来就是更新远程仓库信息=>先删除,再添加,最后拉取。

  • 删除远程仓库
git remote rm origin
  • 重新添加远程仓库
git remote add origin url
// 其中的url就用你项目的ssh地址或http/https地址,推荐使用ssh地址
比如我是这样
git remote add origin git@git.demo/sample.git
  • 拉取

远程跟踪信息已更新,需要将更新拉取回本地,这时需要用到git fetch命令

更新远程跟踪仓库

git fetch origin

或者,更新所有

git fetch --all

总结

上述一套操作下来,问题就解决了,如果你git知识掌握得深,这种小问题简直就是轻轻松,可见学习不能停,共勉。