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來對遠端倉庫進行
我覺得這與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如何保存你輸入的密碼?