2017-09-13 59 views
0

我想在沒有克隆的情況下在特定提交哈希上獲取git回購!每個例子都想克隆整個回購。這是有道理的,但我想到的回購是巨大的,我需要這個留下一個小的足跡,因爲它是與碼頭圖像。在沒有克隆的情況下在特定提交時抓取git回購

的提交哈希值是在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存儲庫?](https://stackoverflow.com/questions/3489173/how-to-clone-git-repository-with-specific-revision-changeset) – jonrsharpe

+0

使用標籤,人! – o11c

+0

你*可能*有這個選項:https://developer.github.com/v3/git/trees/(但我會警告你,使用它是痛苦的;淺克隆更容易和更有效率)。 – torek

回答

1

你需要一個Git倉庫,在錯誤消息中顯示的原因:

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

的「未公開的對象」是一個沒有名字直接附着在它上面。 (如果這個對象有一個名字,你可以請求命名的東西,並且服務器會給你這個對象,假設像「我不允許藍色的貓」這樣的投訴暗示着「我允許其他人貓的顏色「,這不一定是真實的,但它是一種合理的假設。)這意味着你必須通過一些間接手段獲取對象,即使用git fetch

根據定義,您需要的存儲庫是原始存儲庫的克隆 - 至少是部分克隆。你可以使用一個克隆,這是一個不完整的。準確地說,深度是必需的,是事先無法計算出來的:有完整克隆的人可以計算出結果,一旦有足夠深的克隆,就可以找到確切的數目。但是如果你的克隆太淺,你只知道你的克隆太淺。

另請參閱Git fetch a specific commit by hashgit shallow clone (clone --depth) misses remote branches。請注意,您可能需要也可能不需要--single-branch。克隆一定的深度,看看是否夠用,如果不夠的話,用git fetch --depth <bigger-number>提高深度,直到深度爲止。


事實上,這種邏輯似乎是那句「來證明這一規則的例外」的真正起源:它來自拉丁短語抗辯probat regulam在casibus非exceptis。有關詳情,請參閱https://pocketbookuk.com/tag/cicero/this answer on english.stackexchange.com

相關問題