1. 程式人生 > >git的傳輸協議及各自優缺點(本地傳輸協議,ssh,http,git)

git的傳輸協議及各自優缺點(本地傳輸協議,ssh,http,git)

協議

Git 可以使用四種主要的協議來傳輸資料:本地傳輸,SSH 協議,Git 協議和 HTTP 協議。下面分別介紹一下哪些情形應該使用(或避免使用)這些協議。

值得注意的是,除了 HTTP 協議外,其他所有協議都要求在伺服器端安裝並執行 Git。

本地協議

最基本的就是_本地協議(Local protocol)_,所謂的遠端倉庫在該協議中的表示,就是硬碟上的另一個目錄。這常見於團隊每一個成員都對一個共享的檔案系統(例如 NFS)擁有訪問權,或者比較少見的多人共用同一臺電腦的情況。後面一種情況並不安全,因為所有程式碼倉庫例項都儲存在同一臺電腦裡,增加了災難性資料損失 的可能性。

如果你使用一個共享的檔案系統,就可以在一個本地檔案系統中克隆倉庫,推送和獲取。克隆的時候只需要將遠端倉庫的路徑作為

URL 使用,比如下面這樣:

$ git clone /opt/git/project.git

或者這樣:

$ git clone file:///opt/git/project.git

如果在 URL 開頭明確使用 file:// ,那麼 Git 會以一種略微不同的方式執行。如果你只給出路徑,Git 會嘗試使用硬連結或直接複製它所需要的檔案。如果使用了file:// Git 會呼叫它平時通過網路來傳輸資料的工序,而這種方式的效率相對較低。使用 file:// 字首的主要原因是當你需要一個不包含無關引用或物件的乾淨倉庫副本的時候 — 一般指從其他版本控制系統匯入的,或類似情形(參見第 9 章的維護任務)。我們這裡僅僅使用普通路徑,這樣更快。

要新增一個本地倉庫作為現有 Git 專案的遠端倉庫,可以這樣做:

$ git remote add local_proj /opt/git/project.git

然後就可以像在網路上一樣向這個遠端倉庫推送和獲取資料了。

優點

基於檔案倉庫的優點在於它的簡單,同時保留了現存檔案的許可權和網路訪問許可權。如果你的團隊已經有一個全體共享的檔案系統,建立倉庫就十分容易了。你 只需把一份裸倉庫的副本放在大家都能訪問的地方,然後像對其他共享目錄一樣設定讀寫許可權就可以了。我們將在下一節“在伺服器上部署 Git ”中討論如何匯出一個裸倉庫的副本。

這也是從別人工作目錄中獲取工作成果的快捷方法。假如你和你的同事在一個專案中合作,他們想讓你檢出一些東西的時候,執行類似

git pull /home/john/project 通常會比他們推送到伺服器,而你再從伺服器獲取簡單得多。

缺點

這種方法的缺點是,與基本的網路連線訪問相比,難以控制從不同位置來的訪問許可權。如果你想從家裡的膝上型電腦上推送,就要先掛載遠端硬碟,這和基於網路連線的訪問相比更加困難和緩慢。

另一個很重要的問題是該方法不一定就是最快的,尤其是對於共享掛載的檔案系統。本地倉庫只有在你對資料訪問速度快的時候才快。在同一個伺服器上,如果二者同時允許 Git 訪問本地硬碟,通過 NFS 訪問倉庫通常會比 SSH 慢。

SSH 協議

Git 使用的傳輸協議中最常見的可能就是 SSH 了。這是因為大多數環境已經支援通過 SSH 對伺服器的訪問 — 即便還沒有,架設起來也很容易。SSH 也是唯一一個同時支援讀寫操作的網路協議。另外兩個網路協議(HTTP 和 Git)通常都是隻讀的,所以雖然二者對大多數人都可用,但執行寫操作時還是需要 SSH。SSH 同時也是一個驗證授權的網路協議;而因為其普遍性,一般架設和使用都很容易。

通過 SSH 克隆一個 Git 倉庫,你可以像下面這樣給出 ssh:// 的 URL:

$ git clone ssh://[email protected]:project.git

或者不指明某個協議 — 這時 Git 會預設使用 SSH :

$ git clone [email protected]:project.git

如果不指明使用者,Git 會預設使用當前登入的使用者名稱連線伺服器。

優點

使用 SSH 的好處有很多。首先,如果你想擁有對網路倉庫的寫許可權,基本上不可能不使用 SSH。其次,SSH 架設相對比較簡單 — SSH 守護程序很常見,很多網路管理員都有一些使用經驗,而且很多作業系統都自帶了它或者相關的管理工具。再次,通過 SSH 進行訪問是安全的 — 所有資料傳輸都是加密和授權的。最後,和 Git 及本地協議一樣,SSH 也很高效,會在傳輸之前儘可能壓縮資料。

缺點

SSH 的限制在於你不能通過它實現倉庫的匿名訪問。即使僅為讀取資料,人們也必須在能通過 SSH 訪問主機的前提下才能訪問倉庫,這使得 SSH 不利於開源的專案。如果你僅僅在公司網路裡使用,SSH 可能是你唯一需要使用的協議。如果想允許對專案的匿名只讀訪問,那麼除了為自己推送而架設 SSH 協議之外,還需要支援其他協議以便他人訪問讀取。

Git 協議

接下來是 Git 協議。這是一個包含在 Git 軟體包中的特殊守護程序; 它會監聽一個提供類似於 SSH 服務的特定埠(9418),而無需任何授權。打算支援 Git 協議的倉庫,需要先建立git-export-daemon-ok 檔案 — 它是協議程序提供倉庫服務的必要條件 — 但除此之外該服務沒有什麼安全措施。要麼所有人都能克隆 Git 倉庫,要麼誰也不能。這也意味著該協議通常不能用來進行推送。你可以允許推送操作;然而由於沒有授權機制,一旦允許該操作,網路上任何一個知道專案 URL 的人將都有推送許可權。不用說,這是十分罕見的情況。

優點

Git 協議是現存最快的傳輸協議。如果你在提供一個有很大訪問量的公共專案,或者一個不需要對讀操作進行授權的龐大專案,架設一個 Git 守護程序來供應倉庫是個不錯的選擇。它使用與 SSH 協議相同的資料傳輸機制,但省去了加密和授權的開銷。

缺點

Git 協議消極的一面是缺少授權機制。用 Git 協議作為訪問專案的唯一方法通常是不可取的。一般的做法是,同時提供 SSH 介面,讓幾個開發者擁有推送(寫)許可權,其他人通過git:// 擁有隻讀許可權。Git 協議可能也是最難架設的協議。它要求有單獨的守護程序,需要定製 — 我們將在本章的 “Gitosis” 一節詳細介紹它的架設 — 需要設定xinetd 或類似的程式,而這些工作就沒那麼輕鬆了。該協議還要求防火牆開放 9418 埠,而企業級防火牆一般不允許對這個非標準埠的訪問。大型企業級防火牆通常會封鎖這個少見的埠。

HTTP/S 協議

最後還有 HTTP 協議。HTTP 或 HTTPS 協議的優美之處在於架設的簡便性。基本上,只需要把 Git 的裸倉庫檔案放在 HTTP 的根目錄下,配置一個特定的post-update 掛鉤(hook)就可以搞定(Git 掛鉤的細節見第 7 章)。此後,每個能訪問 Git 倉庫所在伺服器上 web 服務的人都可以進行克隆操作。下面的操作可以允許通過 HTTP 對倉庫進行讀取:

$ cd /var/www/htdocs/

$ git clone --bare /path/to/git_project gitproject.git

$ cd gitproject.git

$ mv hooks/post-update.sample hooks/post-update

$ chmod a+x hooks/post-update

這樣就可以了。Git 附帶的 post-update 掛鉤會預設執行合適的命令(git update-server-info)來確保通過 HTTP 的獲取和克隆正常工作。這條命令在你用 SSH 向倉庫推送內容時執行;之後,其他人就可以用下面的命令來克隆倉庫:

$ git clone http://example.com/gitproject.git

在本例中,我們使用了 Apache 設定中常用的 /var/www/htdocs 路徑,不過你可以使用任何靜態 web 服務 — 把裸倉庫放在它的目錄裡就行。 Git 的資料是以最基本的靜態檔案的形式提供的(關於如何提供檔案的詳情見第 9 章)。

通過 HTTP 進行推送操作也是可能的,不過這種做法不太常見,並且牽扯到複雜的 WebDAV 設定。由於很少用到,本書將略過對該內容的討論。如果對 HTTP 推送協議感興趣,不妨開啟這個地址看一下操作方法:http://www.kernel.org/pub/software/scm/git/docs/howto/setup-git-server-over-http.txt 。通過 HTTP 推送的好處之一是你可以使用任何 WebDAV 伺服器,不需要為 Git 設定特殊環境;所以如果主機提供商支援通過 WebDAV 更新網站內容,你也可以使用這項功能。

優點

使用 HTTP 協議的好處是易於架設。幾條必要的命令就可以讓全世界讀取到倉庫的內容。花費不過幾分鐘。HTTP 協議不會佔用過多伺服器資源。因為它一般只用到靜態的 HTTP 服務提供所有資料,普通的 Apache 伺服器平均每秒能支撐數千個檔案的併發訪問 — 哪怕讓一個小型伺服器超載都很難。

你也可以通過 HTTPS 提供只讀的倉庫,這意味著你可以加密傳輸內容;你甚至可以要求客戶端使用特定簽名的 SSL 證書。一般情況下,如果到了這一步,使用 SSH 公共金鑰可能是更簡單的方案;不過也存在一些特殊情況,這時通過 HTTPS 使用帶簽名的 SSL 證書或者其他基於 HTTP 的只讀連線授權方式是更好的解決方案。

HTTP 還有個額外的好處:HTTP 是一個如此常見的協議,以至於企業級防火牆通常都允許其埠的通訊。

缺點

HTTP 協議的消極面在於,相對來說客戶端效率更低。克隆或者下載倉庫內容可能會花費更多時間,而且 HTTP 傳輸的體積和網路開銷比其他任何一個協議都大。因為它沒有按需供應的能力 傳輸過程中沒有服務端的動態計算 因而 HTTP 協議經常會被稱為_傻瓜(dumb_協議。更多 HTTP 協議和其他協議效率

相關推薦

git傳輸協議各自優缺點本地傳輸協議sshhttpgit

協議 Git 可以使用四種主要的協議來傳輸資料:本地傳輸,SSH 協議,Git 協議和 HTTP 協議。下面分別介紹一下哪些情形應該使用(或避免使用)這些協議。 值得注意的是,除了 HTTP 協議外,其他所有協議都要求在伺服器端安裝並執行 Git。 本地協議 最基本的就是_

簡述TCP、UDP區別各自優缺點

1、UDP UDP是面向無連線的通訊協議,UDP資料包括目的埠號和源埠號資訊 優點: UDP速度快,操作簡單,要求系統資源較少,由於通訊不需要連線 可實現廣播發送 缺點: UDP傳送資料前並不與對方簡歷連線,對接收到的資料也不傳送確認訊號,傳送端不知道資料是否會正確接收,也不重複傳送,不

常用的USB開發工具介紹各自優缺點

這些年做了很多帶有USB功能的產品,主要都是USB Device,用於和PC連線等,介紹一下開發過程中使用到的幾個工具。 1,Bus Hound 可以說是USB開發的必備工具,XP系統及之前使用5.0就可以,到了WIN7之後需要使用新版本6.0。 能夠擷取USB列舉及正常通

ICMP協議應用例項PingTraceroute

ICMP協議 在網際網路傳輸過程中,IP資料報難免會出現差錯,通常出現差錯,處理方法就是丟棄,但是一般,出現差錯後,會發送ICMP報文給主機,告訴它一些差錯資訊,以及對當前的網路狀態進行一個探尋。可以說,ICMP的主要目的是用於在TCP/IP網路中傳送出錯和控制

asp.net中常用的幾種頁面間傳遞引數的方法,各自優缺點

1、頁面重定向方式中常用的兩 (1)Redirect 方法將客戶端重定向到新的頁面,只是簡單地終止當前頁面,並轉入新的頁面開始執行,對轉入的頁面無任何限制。 (2)Transfer 方法終止當前頁的執行,併為當前請求開始執行新的頁面。把執行流程從當前頁面轉到同一伺服器中的

phtoshop cs6 下載安裝破解方法另附Photoshop CC 2018破解版圖文教程

    前言:     前端雖然用PS不多,但有時需要用PS切圖;UI給你PSD圖,需要取色,檢視字型顏色大小;測量元素寬高等     但有時想找一個“麻雀雖小,五臟俱全”又是破解版的PS,也不是那麼容易的     注:ps完整版不僅體積大,啟用時也會佔用更多記憶體,而且很多功能前端是不需要

tmux中如何完整copy單獨一個pane中的文字到系統剪貼簿本地shell和遠端ssh

以下配置在tmux 2.4以上版本通過。 多個pane的情況下,如果是按住shift用滑鼠左鍵拖動,會橫跨多個pane,從而copy到不需要的文字。 經過多次嘗試,最後試出了在本地shell和遠端ssh都可以copy單獨一個pane中的文字: #############

快學Scala學習筆記習題解答5-8類、物件、包和繼承

本文scala使用的版本是2.11.7 第五章 類 5.1 基本操作 class Person { // Scala會生成一個私有的final欄位和一個getter方法,但沒有setter val timeStamp = ne

TCP/IP之TCP協議:流量控制滑動視窗協議

一、流量控制(滑動視窗協議) 1、流量控制是管理兩端的流量,以免會產生髮送過塊導致收端溢位,或者因收端處理太快而浪費時間的狀態。用的是:滑動視窗,以位元組為單位 2、視窗有3種動作:展開(右邊向右),合攏(左邊向右),收縮(右邊向左)這三種動作受接收端的控制。 合攏:表示已經收到相應位元組的確認了 展開:表

計算機視覺筆記資料整理含影象分割、目標檢測小方向學習

前言 1、簡單聊聊: 在我腦海中我能通過這些年聽到的技術名詞來感受到技術的更新及趨勢,這種技術發展有時候我覺得連關注的腳步都趕不上。簡單回顧看看,從我能聽到的技術名詞來感受,最開始耳聞比較多「雲端計算」這玩意,後來聽到比較多的是「資料探勘」,當時想著等考上研也要

常見LTE問題答案彙總資源分配方法、ICIC、CoMP、SC

部分摘自百度文庫 1、衡量LTE覆蓋和訊號質量基本測量量是什麼? LTE中最基本,也是日常測試中關注最多的測量有四個: 1)RSRP(ReferenceSignal Received Power)

Genymotion配置使用教程最新最完整版附各部分下載地址

早都聽說了Genymotion好用,今天才抽空把他配置出來,過程算是很曲折啊,不過好在完成了。而且我發現網上的教程都不怎麼全,我還是找了好幾篇文章才把他完整的配置出來,這篇是我從下載到專案執行成功的所有過程,希望對大家有所幫助。閒話到此結束。 首先第一步:註冊G

訪問控制安全機制相關模型包括:強制訪問控制和自主訪問控制

緒論   訪問控制,作為提供資訊保安保障的主要手段,及最為突出的安全機制, 被廣泛地應用於防火牆、檔案訪問、VPN及物理安全等多個方面。 所有這些技術可歸諸於幾類訪問控制模型,本文將一一介紹並以例項說明,以幫助設計者在多變的環境中解決相關安全問題。 第一章 訪問控制的概念   訪問控制是資訊保安保

Redis哨兵模式sentinel學習總結部署記錄主從複製、讀寫分離、主從切換

Redis的叢集方案大致有三種:1)redis cluster叢集方案;2)master/slave主從方案;3)哨兵模式來進行主

HTTP圖解讀書筆記第四章 返回結果的HTTP狀態碼

一、狀態碼 5種狀態碼: 具有代表性的14個狀態碼: 2XX 請求被正常處理 200 ok        表示客戶端發來的請求在服務端被正常處理了 204 no Content &n

Apache下兩個HttpClient的區org.apache.commons.httpclient.HttpClientorg.apache.http.client.HttpClient

在我們使用java來模擬提交時經常會用到HttpClient類,但是會發現在Apache下有兩個包下有此類。 1. org.apache.commons.httpclient.HttpClient 2. org.apache.http.client.HttpClient

Git學習筆記 --- --- git的安裝本地倉庫的創建github上倉庫的連接方式

由於 分布式版本控制 是我 控制系統 路徑 一行代碼 信息 控制 fff 首先了解git的作用是什麽,本地倉庫,中央倉庫都是幹什麽的? Git是分布式版本控制系統,同一個Git倉庫,可以分布到不同的機器上。實際情況往往是這樣,找一臺電腦充當服務器的角色,每天24小時開機,其

tcpTransmission Control Protocol傳輸控制協議案例檔案下載器

----------udp通訊模型 是寫信的模型 要填上ip 埠 特點:不太安全,容易丟包 飛q:edp ----------tcp通訊模型 是打電話的模型,不需要填寫ip和port TCP:安全 在通訊開始之前,一定要建立相關的連結,才能傳送資料。 建立通道。 --------

Git與svn的異同各自優缺點

相同: 能記錄檔案的所有更改記錄。這樣是為了大量更改後,但是最後覺得還是原來的版本程式碼好,可以有記錄回到過去,而不用採用 Copy 舊程式碼另存為某檔案,然後某個時間從大量檔案中找你需要的歷史記錄,版本控制幫我們做到了歷史記錄的儲存,可以方便地查詢及回滾到過去的某一版本。 不同: git和

MQTT協議學習實踐Linux服務端Android客戶端的例子

nbsp hub 設備 log config cati href 10.10.4 rmi 前言 MQTT(Message Queuing Telemetry Transport),是一個物聯網傳輸協議,它被設計用於輕量級的發布/訂閱式消息傳輸,旨在為低帶寬和不穩定