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

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 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來對遠端倉庫進行

,git fetch,git pull, 或git push操作時,你會被要求輸入Github的使用者名稱和密碼。git clone

但是實際上並不需要輸入使用者名稱和密碼,難道是幫助文檔寫錯了嗎,這下我也有問題要問了,希望其他人可以繼續我的回答!或者可以在我新開闢的問題中回答,點擊這裡進入。
    为情所困

    你覺得HTTP如何保存你輸入的密碼?

      最新下載
      更多>
      網站特效
      網站源碼
      網站素材
      前端模板
      關於我們 免責聲明 Sitemap
      PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!