网上一搜一大堆重复的信息,一个都没有解决我的问题。。。 索性整理一下自己的解决方法,希望能给遇到相同问题的同学一点参考。
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知识掌握得深,这种小问题简直就是轻轻松,可见学习不能停,共勉。