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,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來對遠端倉庫進行
我覺得這與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的幫助手冊中發現了這句話:
,
但是實際上並不需要輸入使用者名稱和密碼,難道是幫助文檔寫錯了嗎,這下我也有問題要問了,希望其他人可以繼續我的回答!或者可以在我新開闢的問題中回答,點擊這裡進入。git fetch
,git pull
, 或git push
操作時,你會被要求輸入Github的使用者名稱和密碼。git clone
你覺得HTTP如何保存你輸入的密碼?