在不克隆的情况下获取特定提交的git仓库

3
我正在尝试获取特定提交哈希的git存储库,而不需要克隆!每个示例都想要克隆整个存储库。这是有道理的,但我心中所想的存储库非常庞大,我需要它以较小的占用空间留下,因为它将与docker镜像一起使用。
提交哈希在URL中 - 可以/应该使用wgetcurl递归获取,但我觉得GitHub会阻止它,因为我始终只能得到robots.txt 存储库和提交:

https://github.com/phalcon/cphalcon/tree/1d6d21c98026b5de79ba5e75a3930ce7d1ebcd2e

我的最佳尝试错误:

git fetch https://github.com/phalcon/cphalcon/ 1d6d21c98026b5de79ba5e75a3930ce7d1ebcd2e
error: Server does not allow request for unadvertised object 1d6d21c98026b5de79ba5e75a3930ce7d1ebcd2e

更新

使用克隆的答案建议并没有回答问题。我可以轻松克隆/检出。尝试在没有完整仓库的情况下完成此操作。


1
可能是如何克隆具有特定修订/更改集的git存储库?的重复问题。 - jonrsharpe
1
使用标签,人们! - o11c
可以选择这个选项:https://developer.github.com/v3/git/trees/ (但是我要警告您,使用它会很痛苦;浅克隆更容易且更高效)。 - torek
@torek 绝对超出范围!不过还是谢谢你的建议。 - Christian Bongiorno
1个回答

5
您需要一个Git存储库,原因如错误消息所示:
error: Server does not allow request for unadvertised object ...
“未公开对象”是指没有直接附加名称的对象。(如果该对象有名称,您可以请求命名的内容,服务器将向您提供该对象。这假设像“我不允许这里有蓝色猫”这样的投诉意味着“我确实允许其他颜色的猫”,但这也不一定正确,但这是一个合理的假设。1)这意味着您必须通过某些间接手段获取对象,即使用git fetch

您需要的存储库按定义是克隆,或者至少是原始存储库的部分克隆。您可以使用浅克隆,即不完整的克隆。确切地说,您无法预先计算所需的深度:拥有完整克隆的人可以找出它,一旦您拥有足够深的克隆,您就可以找到确切的数字。但是,如果您的克隆太浅,则只知道您的克隆太浅。

另请参见Git fetch a specific commit by hashgit shallow clone (clone --depth) misses remote branches。请注意,您可能需要或不需要--single-branch。使用一些深度进行克隆,看看是否足够,如果不足,则使用git fetch --depth <bigger-number>增加深度,直到足够为止。


1事实上,这种逻辑似乎是短语“证明规则的例外”的真正起源:它来自拉丁短语Exceptio probat regulam in casibus non exceptis。有关此内容,请参见https://pocketbookuk.com/tag/cicero/english.stackexchange.com上的此答案


那你可以在克隆之前获取吗? - Mehdi Charife

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接