Git剖析

Tengpaz Lv3

Git

传输协议

对于Git怎么传输数据,官方文档给了两种不同的处理方式,分别是”哑(dump)“协议和”智能(smart)协议.

哑协议

如果架设的仓库是一个基于HTTP协议的只读版本库,注意是只读.一般而言这种情况下使用的就是哑协议,它不允许客户端向服务端传输数据,可能这也是为什么会称为”哑”(不过具体是怎么命名的请另外深入了解).

对于基于HTTP协议的一个版本库来说,如果我们使用git clone抓取仓库信息,那么就涉及到哑协议,具体实现过程如下:

首先是我们使用了指令

1
git clone http://server/repo-progit.git

这里的server指的是服务器,repo指的是仓库名.

输入指令后第一件事是拉取info/refs文件.这个文件是通过update-server-info生成的,于是乎相当于经历了一下过程:

1
2
=> GET info/refs
xxxxxxxxxxxxxxx(一堆编号) refs/heads/master

这样就获取了一个远程引用和SHA-1值的列表,接下来要确定HEAD引用的是什么,由此来确定完成后被检出到工作目录里的内容.

1
2
=> GET HEAD
ref: refs/heads/master

这说明在抓取完成后应该检出master分支,然后开始遍历处理,然后由于是从之前获取的xxxxx对象开始的,所以首先获取它:

1
2
=> GET objects/xx/xxx
([number] bytes of binary data)

然后就取得了一个服务器上保存的对象,这是使用静态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 进行许可。
评论
目录
Git剖析