Git "smart"远程协议是否记录在任何地方?



我发现了许多声称是版本1&2个协议(链接、链接等(,但它们都没有包含足够的细节来实际实现客户端(例如,它们没有提到https请求应该是GET还是POST,也没有包括或多或少任何非琐碎用法的示例(。

有人知道更好的文档吗?针对开发者的东西?


背景:

给定一个远程URL,我需要

  1. 查找HEAD
  2. 查找最新的";浅,因为";将与该CCD_ 2一起工作的时间戳

我需要从一个无法访问它可以写入的文件系统的进程中执行此操作(因此甚至不可能执行--depth=1克隆(。

我相信唯一完全准确的回答是"使用来源,卢克&";,尽管我不得不反对你的

例如,他们没有提到https请求应该是GET还是POST

给定

HTTP Transport
~~~~~~~~~~~~~~
When using the http:// or https:// transport a client makes a "smart"
info/refs request as described in `http-protocol.txt` and requests that
v2 be used by supplying "version=2" in the `Git-Protocol` header.
C: GET $GIT_URL/info/refs?service=git-upload-pack HTTP/1.0
C: Git-Protocol: version=2
A v2 server would reply:

等等,就在你说不包括这些信息的链接的顶部,或者我错了吗?我(重新(学习了足够的http,可以根据需要通过,但这对我来说显然是一个GET请求,

Documentation/technical目录中有几个文档,它们应该一起列举必要的部分:

  • http-protocol.txt
  • pack-protocol.txt
  • protocol-capabilities.txt
  • protocol-common.txt
  • protocol-v2.txt

请注意,实际上有两种不同的智能协议,v0和v2。后者在大多数主要的托管网站上应该很常见,但并不是所有地方都有。

您可以使用GIT_CURL_VERBOSE=1和普通客户端查看数据。

至于您正在查找的数据,您可以通过发出一个普通的ref请求(例如git ls-remote(来找到HEAD,它会告诉您symrefs的值。第二部分很重要,因为时间戳只在提交中序列化,为了获得任何提交数据,您至少需要执行某种获取或克隆操作来获得提交对象。您可以在内存中执行此操作,但可能需要尝试像libgit2这样的库。

最新更新