从远程存储库获取提交元数据,而无需获取提交内容

时间:2018-02-22 19:53:17

标签: git github github-api

我想获得像git cat-file -p <COMMIT-ID>返回的提交元数据(请参阅Git本身的示例)

 $ git cat-file -p a4ee444

 tree 34f4cce68fd066d044dcbca866a161fa5c98dc6b
 parent 1f9c1fab6421402a9c893a2fcd35fb4cf6116166
 parent ffa952497288d29d94b16675c6789ef83850def3
 author Junio C Hamano <gitster@pobox.com> 1518737095 -0800
 committer Junio C Hamano <gitster@pobox.com> 1518737095 -0800
 mergetag object ffa952497288d29d94b16675c6789ef83850def3
  type commit
  tag v2.16.2
  tagger Junio C Hamano <gitster@pobox.com> 1518737031 -0800

  Git 2.16.2
  -----BEGIN PGP SIGNATURE-----
            ...
  -----END PGP SIGNATURE-----

 Sync with 2.16.2

 * tag 'v2.16.2':
   Git 2.16.2

但无需使用其所有文件获取整个提交。

是否有人知道是否可以通过git客户端程序或其他方式获取此远程信息,例如使用Git的内部传输协议?

由于

2 个答案:

答案 0 :(得分:1)

您可以使用GitHub API get information about a commit

例如在命令行中使用curl

curl -X GET https://api.github.com/repos/phdru/ppu/git/commits/63c535d7c6b151c210e344dd4b745407f3911d76

(这是我的存储库中的a commit

对于身份验证传递-u

curl -u user:password …

答案 1 :(得分:1)

  

可以通过git客户端程序

获取此远程信息

否:即使是浅层克隆,客户也希望&#34;完成提交所需的所有对象。

  

或通过其他方式,比如使用Git的内部传输协议?

可能只要有一个指向它的名称,或者服务器在uploadpack.allowReachableSHA1InWant配置为true的存储库上运行,或uploadpack.allowAnySHA1InWant配置为{{{ 1}}。发送者通常不会就树对象进行协商:他们只是假设你有一些对象可以通过你(作为接收者)说你有的提交。所以它不是以这种方式工作的。

请注意,提交中true标头中的PGP签名只是从带注释的标签中复制而来。我没有尝试过,但深度 0 的浅层克隆可能会检索所有标签(仅限)。在这种情况下,您只需查看标记对象即可。这部分 旨在以这种方式工作,看起来更有前途。此外,带注释的标记对象通常具有指向它们的标记名称,因此您不需要特殊的mergetag object ...配置条目:这些对象直接发布,因此始终&#34;想&#34; -able

(当然,您必须找到正确的标签名称,如果没有提交数据,您将如何做到这一点并不清楚。另一方面,您不清楚如何找到首先是提交哈希。)

在这种情况下,实际的标签对象是:

uploadpack