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

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 you git clone, git fetch, git pull, or git push to 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, git fetch, git pull, or git push to a remote repository using HTTPS URLs on the command line, you'll be asked for your GitHub username and password.
当你在命令行中使用HTTPS的URL来对远程仓库进行

, git fetch, git pull, 或者 git push操作时,你会被要求输入Github的用户名和密码。git clone

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

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板