Git剖析
Git
传输协议
对于Git怎么传输数据,官方文档给了两种不同的处理方式,分别是”哑(dump)
“协议和”智能(smart)
协议.
哑协议
如果架设的仓库是一个基于HTTP协议的只读版本库,注意是只读.一般而言这种情况下使用的就是哑协议,它不允许客户端向服务端传输数据,可能这也是为什么会称为”哑”(不过具体是怎么命名的请另外深入了解).
对于基于HTTP协议的一个版本库来说,如果我们使用git clone
抓取仓库信息,那么就涉及到哑协议,具体实现过程如下:
首先是我们使用了指令
1 | git clone http://server/repo-progit.git |
这里的server
指的是服务器,repo
指的是仓库名.
输入指令后第一件事是拉取info/refs
文件.这个文件是通过update-server-info
生成的,于是乎相当于经历了一下过程:
1 | => GET info/refs |
这样就获取了一个远程引用和SHA-1
值的列表,接下来要确定HEAD引用的是什么,由此来确定完成后被检出到工作目录里的内容.
1 | => GET HEAD |
这说明在抓取完成后应该检出master
分支,然后开始遍历处理,然后由于是从之前获取的xxxxx
对象开始的,所以首先获取它:
1 | => GET objects/xx/xxx |
然后就取得了一个服务器上保存的对象,这是使用静态HTTP GET
请求获取的,然后可以zlib
解压它
- 标题: Git剖析
- 作者: Tengpaz
- 创建于 : 2024-07-29 22:59:49
- 更新于 : 2024-07-29 23:38:11
- 链接: https://qinaida.cn/tengpaz/2024/07/29/Git剖析/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论