【问题标题】:fetch git repo at specific commit without cloning在特定提交处获取 git repo 而无需克隆
【发布时间】:2018-02-22 19:04:24
【问题描述】:

我正在尝试以特定的提交哈希不克隆获取 git 存储库!每个示例都想克隆整个 repo。这是有道理的,但我想到的 repo 是巨大的,我需要它来留下一个小的足迹,因为它与 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

更新

使用克隆的答案建议没有回答问题。我可以克隆/结帐没问题。尝试在本地没有整个 repo 的情况下做到这一点

【问题讨论】:

标签: git github git-remote git-fetch


【解决方案1】:

由于错误消息中显示的原因,您将需要一个 Git 存储库:

error: Server does not allow request for unadvertised object ...

“未广告对象”是没有直接附加名称的对象。 (如果对象有名字,你可以请求命名的东西,服务器会给你对象。这假设像“我不允许蓝色猫在这里”这样的抱怨意味着“我确实允许一些其他颜色的猫”,这也不一定正确,但这是一种合理的假设。1) 这意味着您必须通过某种间接方式获取对象,即使用git fetch.

根据定义,您需要的存储库是原始存储库的克隆(或至少是部分克隆)。您可以使用 shallow 克隆,它是不完整的。确切地说,需要多少深度是您无法提前计算的:拥有完整克隆的人可以计算出来,一旦您拥有足够深的克隆,您就可以找到确切的数字。但是如果你的克隆太浅,你只知道你的克隆太浅了。

另见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/this answer on english.stackexchange.com

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-11
    • 1970-01-01
    • 1970-01-01
    • 2015-01-10
    • 2010-11-05
    相关资源
    最近更新 更多