通过HTTP进行Git克隆

时间:2014-09-21 01:12:36

标签: git http repository clone

我对Git客户端通过HTTP协议执行clone命令时所执行的一步一步的工作流感兴趣。

我们假设您的Git存储库位于http://gitserver.com/gitrepo

当你通过HTTP协议git clone http://gitserver.com/gitrepo进行Git克隆时,客户端会访问这些URL:

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

为什么要这样做呢?接下来做什么?它如何获得存储库中的完整文件列表?

1 个答案:

答案 0 :(得分:1)

旧版本的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"

中找到详细描述的哑和智能协议