从远程存储库获取提交元数据而不获取提交内容
Get commit metadata from remote repository without fetching commit content
我想获得像 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 的内部传输协议)获取此远程信息?
谢谢
您可以 get information about a commit 使用 GitHub API。
例如在命令行中使用curl
:
curl -X GET https://api.github.com/repos/phdru/ppu/git/commits/63c535d7c6b151c210e344dd4b745407f3911d76
(这是来自我的存储库的 a commit)
认证通过 -u
:
curl -u user:password …
is [it] possible to get this remote information via the git client program,
否:即使使用浅克隆,客户端 "want" 完成提交所需的所有 object。
or by some other means, like using Git's internal transfer protocols?
可能,只要有指向它的名称,或者服务器 运行 在将 uploadpack.allowReachableSHA1InWant
配置为 true
的存储库上,或者 [=13] =] 配置为 true
。不过,发件人通常不会就树 objects 进行协商:他们只是假设您可以从您(作为接收者)所说的提交中获得 objects。所以它不是设计成这样工作的。
请注意,提交中 mergetag object ...
header 中的 PGP 签名只是从带注释的标签中复制而来。我没有尝试过,但是深度为 zero 的浅层克隆可能会检索所有标签(仅)。在这种情况下,您可以只查看标签 object。这部分 是 设计的,并且看起来更有前途。此外,带注释的标签 objects 通常有标签 names 指向它们,因此您不需要特殊的 uploadpack
配置条目:这些 object s 是直接发布的,因此总是 "want"-able.
(当然,您必须找到正确的标签名称,如果没有提交数据,您将如何做到这一点尚不清楚。另一方面,您还不清楚如何在第一个中找到提交哈希地方。)
本例中的实际标签 object 是:
$ git rev-parse v2.16.2
86aabcca24951ccfb9392014c8a379992434a7df
$ git cat-file -p v2.16.2
object ffa952497288d29d94b16675c6789ef83850def3
type commit
tag v2.16.2
tagger Junio C Hamano <gitster@pobox.com> 1518737031 -0800
Git 2.16.2
-----BEGIN PGP SIGNATURE-----
iQIzBAABCAAdFiEE4fA2sf7nIh/HeOzvsLXohpav5ssFAlqGFocACgkQsLXohpav
5svXQBAAvNnbVRImTzETgfwBNwl8qEfEVJb6OTVoPF6IiPwaWCu/tTlS7X4wml7S
e9s6ZyXzVRRJSDts6hln+V5FAESpLdwSEj2vWdId8ipafSUp2OnZvb7tHYgV3RCb
01PrJtA5h/RywwGO8OSZP6hEi5GlBvKXOxg76Yw8LVanP0/9CUBP3Fn+Gh55Th3B
1tL8GXwQg8pADcl9Yx4X82YkGq672SShRiu3WAcuZY9BOdMDt18hebl2JHUkGT1K
jwm06aLmb9zIczNqFZqu9h/nvnxvM2lbHHQ6JpyIvObXCLVzzxvtso8ilEVDlEwo
RYPAe8a7gDuIls7ziff9a0fSTlTd1sY3l1FSJLg73jB+j/sP0pTaTN2a2XfoFqLS
oV1h7AwOA9AOn+bp3kKWOIuqHcZVHU68wHa4z3fyi6vWUEWMpsY3KZ2zY0cEce9i
SJKk5y2HYk4jCv72n0XC4WIgexkn23Btr58u9+zNraecyO0EwzGfrouiruh6zfve
DCieVcYDy7y50yhI2ES+RIJvGPPp8RRFXEfjLUSyGEJgDxuJqhp3oZadqGRSwVeN
NjOEr46zhHvd4jiGNL6409v5PeViKRdOhqOf0oikYQwzNOAeu8fXtx/8Fc2X/KW5
DNaz4oxo/GwGfaGI7w1IsiH4HcGVMJXQokc1Lmvv5kEx6iXp7q0=
=rp/y
-----END PGP SIGNATURE-----
我想获得像 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 的内部传输协议)获取此远程信息?
谢谢
您可以 get information about a commit 使用 GitHub API。
例如在命令行中使用curl
:
curl -X GET https://api.github.com/repos/phdru/ppu/git/commits/63c535d7c6b151c210e344dd4b745407f3911d76
(这是来自我的存储库的 a commit)
认证通过 -u
:
curl -u user:password …
is [it] possible to get this remote information via the git client program,
否:即使使用浅克隆,客户端 "want" 完成提交所需的所有 object。
or by some other means, like using Git's internal transfer protocols?
可能,只要有指向它的名称,或者服务器 运行 在将 uploadpack.allowReachableSHA1InWant
配置为 true
的存储库上,或者 [=13] =] 配置为 true
。不过,发件人通常不会就树 objects 进行协商:他们只是假设您可以从您(作为接收者)所说的提交中获得 objects。所以它不是设计成这样工作的。
请注意,提交中 mergetag object ...
header 中的 PGP 签名只是从带注释的标签中复制而来。我没有尝试过,但是深度为 zero 的浅层克隆可能会检索所有标签(仅)。在这种情况下,您可以只查看标签 object。这部分 是 设计的,并且看起来更有前途。此外,带注释的标签 objects 通常有标签 names 指向它们,因此您不需要特殊的 uploadpack
配置条目:这些 object s 是直接发布的,因此总是 "want"-able.
(当然,您必须找到正确的标签名称,如果没有提交数据,您将如何做到这一点尚不清楚。另一方面,您还不清楚如何在第一个中找到提交哈希地方。)
本例中的实际标签 object 是:
$ git rev-parse v2.16.2
86aabcca24951ccfb9392014c8a379992434a7df
$ git cat-file -p v2.16.2
object ffa952497288d29d94b16675c6789ef83850def3
type commit
tag v2.16.2
tagger Junio C Hamano <gitster@pobox.com> 1518737031 -0800
Git 2.16.2
-----BEGIN PGP SIGNATURE-----
iQIzBAABCAAdFiEE4fA2sf7nIh/HeOzvsLXohpav5ssFAlqGFocACgkQsLXohpav
5svXQBAAvNnbVRImTzETgfwBNwl8qEfEVJb6OTVoPF6IiPwaWCu/tTlS7X4wml7S
e9s6ZyXzVRRJSDts6hln+V5FAESpLdwSEj2vWdId8ipafSUp2OnZvb7tHYgV3RCb
01PrJtA5h/RywwGO8OSZP6hEi5GlBvKXOxg76Yw8LVanP0/9CUBP3Fn+Gh55Th3B
1tL8GXwQg8pADcl9Yx4X82YkGq672SShRiu3WAcuZY9BOdMDt18hebl2JHUkGT1K
jwm06aLmb9zIczNqFZqu9h/nvnxvM2lbHHQ6JpyIvObXCLVzzxvtso8ilEVDlEwo
RYPAe8a7gDuIls7ziff9a0fSTlTd1sY3l1FSJLg73jB+j/sP0pTaTN2a2XfoFqLS
oV1h7AwOA9AOn+bp3kKWOIuqHcZVHU68wHa4z3fyi6vWUEWMpsY3KZ2zY0cEce9i
SJKk5y2HYk4jCv72n0XC4WIgexkn23Btr58u9+zNraecyO0EwzGfrouiruh6zfve
DCieVcYDy7y50yhI2ES+RIJvGPPp8RRFXEfjLUSyGEJgDxuJqhp3oZadqGRSwVeN
NjOEr46zhHvd4jiGNL6409v5PeViKRdOhqOf0oikYQwzNOAeu8fXtx/8Fc2X/KW5
DNaz4oxo/GwGfaGI7w1IsiH4HcGVMJXQokc1Lmvv5kEx6iXp7q0=
=rp/y
-----END PGP SIGNATURE-----