[英]Git clone over HTTP
我对通过HTTP协议执行clone
命令时Git客户端执行的分步工作流感兴趣。
假设您的Git存储库位于http://gitserver.com/gitrepo
。
当您通过HTTP协议进行Git克隆git clone http://gitserver.com/gitrepo
,客户端将访问以下URL:
GET http://gitserver.com/gitrepo/info/refs?service=git-upload-pack
POST http://gitserver.com/gitrepo/git-upload-pack
为什么要提出这些要求? 接下来会做什么? 如何获取存储库中文件的完整列表?
git的旧版本不支持“ 智能HTTP协议 ”(例如ssh
和git
使用的协议 )。 因此,先发送一个GET
,然后发送一个POST
(取决于GET
的结果)是保持对旧的和新的支持的一种优雅方法。 如Git SCM章节“智能HTTP传输”所述:
新的客户端现在将发送带有额外GET参数的请求,旧服务器将简单地忽略该请求,但是运行智能CGI的服务器将识别并切换到类似于git协议上进行的对话的multi-POST模式。 完成这一系列的POST之后,服务器便知道客户端需要哪些对象,并可以构建自定义的packfile并将其流回。
另外,您可以在Pro-Git书的第9章“ 传输协议 ”部分中找到详细描述的哑协议和智能协议。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.