2014-09-21 133 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"中找到详细描述的笨哑和智能协议。