2014-09-21 143 views
0

我對通過HTTP協議執行clone命令時Git客戶端執行的分步工作流感興趣。通過HTTP的Git克隆

假設您的Git存儲庫位於此處http://gitserver.com/gitrepo

當您通過HTTP協議git clone http://gitserver.com/gitrepo做的Git克隆,客戶端訪問以下網址:

GET http://gitserver.com/gitrepo/info/refs?service=git-upload-pack 
POST http://gitserver.com/gitrepo/git-upload-pack 

爲什麼會做那些要求?接下來做什麼?它如何獲取存儲庫中的完整文件列表?

+0

你有沒有試過wireshark?您將能夠監視客戶端和服務器之間的所有通信。由於它的HTTP,它應該都是明文。 – Lovato 2014-09-21 01:31:11

回答

0

舊版本的git不支持「智能HTTP協議」(如sshgit中使用的那些)。所以,發送一個GET然後POST(取決於GET的結果)是一種優雅的方式來支持新舊兩種。作爲Git SCM chapter "Smart HTTP Transport"狀態:

的新客戶現在將發送一個額外的GET參數 舊的服務器將完全忽略的請求,但服務器上運行的智能 CGI將識別和切換模式,以多POST模式是 類似於通過git協議發生的對話。一旦 這一系列的POST完成,服務器就知道客戶端需要什麼對象,並且可以構建自定義包文件並將其返回。

此外,您還可以在Pro-Git book, chapter 9, section "Transfer Protocol"中找到詳細描述的笨啞和智能協議。