github - 為什麼http方式的git push需要密碼。
ringa_lee
ringa_lee 2017-05-02 09:47:34
0
2
1117

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如何保存你輸入的密碼?

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板