RT. 已經知道從本地如何不用密碼就完成git push到github上,但很好奇為啥http方式就需要每次密碼認證才能push,個人對網絡協議啥的沒接觸過,網上也沒查到相關解釋,所以來這裡問下~
我想大声告诉你2017-05-02 09:49:34
我覺得這與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 push
、git pull
、git fetch
的时候需要验证,而git clone
的时候不需要验证。由此,我可以这样推测(只是我的个人推测,仅供参考),github的服务器就属于那种需要授权的服务器,但是可能git clone
是特別設定不需要驗證的操作之一。
但是我在Github的幫助手冊中發現了這句話:
When you
git clone
,git fetch
,git pull
, orgit 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
, orgit 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