Git 智能传输协议

Git - Transfer Protocols (git-scm.com)

Git中存在两种传输数据的协议:“dump”和“smart”协议。

Dump 协议

类似HTTPS的Get请求,因为其安全性,已经很少被使用了。

获取内容的大致流程:

  1. 获取info/refs
  2. 获取Head
  3. 然后一次获取object对象。(loose形式)
  4. 若获取某一对象失败,则尝试获取pack形式的信息。

Smart 协议

Dump协议简单但是不够高效。

Smart协议中,服务端需要具备Git的知识,能根据客户端发送的信息,分析其needs,然后打包成packfile发送给客户端。

一、上传数据阶段

客户端send-pack,服务端receive-pack

a) ssh

客户端向服务端发送报文以及服务端不存在的object构成的packfile。

报文记录了存在变化的分支信息。

b) http

  1. get request, 获取远程的分支信息。
  2. post request,发送 send-pack的输出和packfile。

二、下载数据阶段

客户端fetch-pack,服务端upload-pack

a) SSH

客户端请求建立连接后,服务端发送git状态信息,包括,另外报文中的

symref=HEAD:refs/heads/master

代表远程文件中,HEAD指针指向的信息。

客户端根据返回的报文信息检查本地存在的objects以及需要的objects信息。

服务端收到报文后,将客户端want的object打包,发送packfile。

b) HTTPs

基于https的下载过程是通过2次请求完成。

  1. get request, 获取每个分支的变更信息。
  2. post request,发送本地存在和want的对象信息。返回RetCode和packfile。
posted @ 2024-08-04 12:40  ckxkexing  阅读(14)  评论(0编辑  收藏  举报