我对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
为什么要这样做呢?接下来做什么?它如何获得存储库中的完整文件列表?
答案 0 :(得分:1)
旧版本的git不支持" 智能HTTP协议" (就像ssh
和git
中使用的那些)。因此,发送GET
然后POST
(取决于GET
的结果)是一种优雅的方式来保持对旧的和新的支持。正如Git SCM chapter "Smart HTTP Transport"所述:
新客户端现在将发送带有额外GET参数的请求 旧服务器将忽略,但服务器运行智能 CGI将识别并将模式切换到多POST模式 类似于git协议上发生的对话。一旦 这一系列的POST完成后,服务器就知道了什么对象了 客户需求,可以构建自定义包文件并将其流回。
此外,您可以在Pro-Git book, chapter 9, section "Transfer Protocol"。
中找到详细描述的哑和智能协议