簡體   English   中英

為什么不能部分克隆git存儲庫?

[英]Why is a partial clone of a git repository impossible?

在與下面的問題相關的答案中,注意到在任何情況下都下載完整的存儲庫(僅結賬是部分的)。

部分克隆(=僅下載存儲庫的一部分)是不可能的,因為涉及快照和計算哈希的git的內部工作原理。

問:我說錯了嗎?

將git存儲庫視為一個巨大的圖形。 實際上它背后有一些復雜的數學......所有文件/對象都以某種方式連接在一起,而git的速度,靈活性和可靠性正是基於這個圖形的東西。

Git對象圖示例 (圖片: http//web.mit.edu/6.005/www/fa15/classes/05-version-control/

Git對象圖示例2 (圖片: http//evadeflow.com/wp-content/uploads/2011/01/git_object_graph_thumb.png

如果您不擁有整個圖表,很可能您無法分辨文件的整個歷史記錄,狀態和路徑,因為您錯過了與此文件來源的連接。 如果子目錄在存儲庫的開頭不存在但后來移入其中的某些文件已經存在於目錄之外,會發生什么? 你會如何跟蹤它們?

此外,(愚蠢的)服務器不可能確定您需要哪些對象,因為git不使用自己的服務器應用程序,而是使用http服務器和ssh服務器。 因此,遠程服務器只能提供文件,但不能確定您實際需要的文件。

GitCheckout子目錄中接受的答案 正好指出這一點:

請注意,稀疏檢出仍然需要您下載整個存儲庫,即使Git下載的某些文件不會在您的工作樹中結束。

因此,在git獲得整個圖形之后,它可以刪除所有這些對象,因為(與服務器相反)它可以確定是否需要它們。

更新:回答你的問題:快照都是由哈希保存和引用的,所以是的,git的內部工作負責這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM