github - 为什么http方式的git push需要密码。
ringa_lee
ringa_lee 2017-05-02 09:47:34
0
2
1018

RT. 已经知道从本地如何不用密码就完成git push到github上,但很好奇为啥http方式就需要每次密码认证才能push,个人对网络协议啥的没接触过,网上也没查到相关解释,所以来这里问下~

ringa_lee
ringa_lee

ringa_lee

모든 응답 (2)
我想大声告诉你

我觉得这与http协议的某些特性有关系。其实github使用的是Smart http协议,而它又是基于http协议的。不过为了方便,后面我也直接使用http协议来称呼它。

当你使用http协议的时候,可以不必在本地进行任何配置就可以push、clone、pull远程仓库,也就是说你可以在任何地方使用这个协议,即具有本地无关性。这是这个协议区别于ssh协议的一大特点。因为http协议不会记住也不会知道请求来自于谁,除非使用特殊方法,如cookie。因此对于那些需要授权的服务器,必须输入用户名和密码进行验证才能获取或推送数据,这样服务器才知道你是谁到底能不能获取或推送数据。

http协议的特点恰恰与ssh协议相反,ssh协议靠ssh key来识别你到底有没有权限推送或者获取数据,而ssh key保存在本地,如果你本地没有ssh key的话,当然是无法完成获取或推送数据的操作的。二者刚好形成互补对立的关系。

现在你应该知道了问题的答案了吧!

下面我想多说一点儿,可能会对你有些帮助。我这里总结一下二者的优缺点:

  • http协议

    • 优点:省去了本地配置的麻烦,只要有URL和相应的权限便能进行相应的操作

    • 缺点:每次操作都需要频繁验证,除非使用密码缓存机制

  • ssh协议

    • 优点:推送或获取数据时不需要每次输入密码进行验证

    • 缺点:在使用之前需要进行配置,并生成ssh key

另外对于github这个网站,我们会发现git pushgit pullgit fetch的时候需要验证,而git clone的时候不需要验证。由此,我可以这样推测(只是我的个人推测,仅供参考),github的服务器就属于那种需要授权的服务器,但是可能git clone是特别设置不需要验证的操作之一。

但是我在Github的帮助手册中发现了这句话:

When yougit clone,git fetch,git pull, orgit pushto a remote repository using HTTPS URLs on the command line, you'll be asked for your GitHub username and password.
当你在命令行中使用HTTPS的URL来对远程仓库进行git clone,git fetch,git pull, 或者git push操作时,你会被要求输入Github的用户名和密码。

但是实际上git clone并不需要输入用户名和密码,难道是帮助文档写错了吗,这下我也有问题要问了,希望其他人可以继续我的回答!或者可以在我新开辟的问题中回答,点击这里进入。

    为情所困

    你觉得HTTP如何保存你输入过的密码呢?

      최신 다운로드
      더>
      웹 효과
      웹사이트 소스 코드
      웹사이트 자료
      프론트엔드 템플릿
      회사 소개 부인 성명 Sitemap
      PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!