gpt4 book ai didi

git - 为什么不能部分克隆 git 存储库?

转载 作者:太空狗 更新时间:2023-10-29 14:18:03 25 4
gpt4 key购买 nike

在与以下问题相关的答案中,请注意在任何情况下都会下载完整的存储库(只有部分 checkout )。

部分克隆(= 仅下载存储库的一部分)是不可能的,因为 git 的内部工作涉及快照和计算哈希。

我说的对吗?

最佳答案

将 git 存储库想象成一个巨大的图形。其实有一些它背后的复杂数学......所有文件/对象都以某种方式连接在一起,而 git 的速度、灵 active 和可靠性正是基于这些图形的东西。

Git object Graph example(图片:http://web.mit.edu/6.005/www/fa15/classes/05-version-control/)

Git object Graph example 2(图片:http://evadeflow.com/wp-content/uploads/2011/01/git_object_graph_thumb.png)

如果您不拥有整个图表,您很可能无法了解文件的全部历史、状态和路径,因为您缺少与该文件来源的联系。 如果子目录在存储库的开头不存在,但后来移入其中的一些文件已经存在于目录之外,会发生什么情况?您将如何跟踪它们?

此外,(愚蠢的)服务器不可能确定你需要哪些对象,因为 git 不使用它自己的服务器应用程序,而是使用 http 服务器和 ssh 服务器。因此,远程服务器只能传送文件,而不能确定您实际需要哪些文件。

Checkout subdirectories in Git? 中接受的答案正是指出了这一点:

Note that sparse checkouts still require you to download the whole repository, even though some of the files Git downloads won't end up in your working tree.

因此,在 git 获得整个图后,它可以删除所有这些对象,因为(与服务器相反)它可以确定是否需要它们。

更新:回答您的问题:快照全部由哈希值保存和引用,所以是的,git 的内部工作对此负责。

关于git - 为什么不能部分克隆 git 存储库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35572378/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com