浅而稀疏的GIT存储库克隆

时间:2018-09-26 21:56:00

标签: git repository clone sparse-checkout

我有一个浅克隆的git存储库,容量超过1 GB。我对所需的文件/目录使用了稀疏签出。

如何将存储库克隆简化为稀疏的检出文件/目录?

最初,通过禁用克隆时的签出,我能够将克隆的存储库限制为仅稀疏签出。然后在进行初始检出之前设置稀疏检出。这将存储库限制为仅约200 MB。更易于管理。但是,将来在某个时候更新远程分支信息会导致其余文件和目录包含在存储库克隆中。将回购克隆大小发送回1 GB以上,我不知道如何仅处理稀疏的结帐文件和目录。

简而言之,我想要的是一个浅的 AND 稀疏存储库 clone 。不只是稀疏地检查浅层回购克隆。完整的仓库会浪费空间,并且某些任务的性能会受到影响。

希望有人可以分享解决方案。谢谢。

1 个答案:

答案 0 :(得分:0)

“稀疏”表示“部分”或“窄”。

从理论上讲,可以进行部分克隆(或称为“窄克隆”),并于2017年12月首先以Git 2.16(如seen here的形式实现。
但是:

这在Git 2.20(2018年第四季度)中得到了进一步优化,因为在将从源存储库中懒散地水化的部分克隆中,我们通常要避免“此对象是否存在(本地)?”在我们故意省略的对象上 当我们创建(部分/稀疏)克隆时。
但是,缓存树代码路径(用于从索引中写入树对象)坚持认为该对象存在,即使对于部分检出区域之外的路径也是如此。
该代码已更新,以避免进行此类检查。

请参见commit 2f215ffJonathan Tan (jhowtan)(2018年10月9日)。
(由Junio C Hamano -- gitster --commit a08b1d6中合并,2018年10月19日)

  

cache-tree:跳过部分克隆中的一些斑点检查

     

在部分克隆中,每当发生稀疏检出时,都会验证索引中所有blob的存在,无论它们是否包含在.git/info/sparse-checkout规范中。
  这会显着降低性能,因为每当发生惰性提取   检查缺少的斑点的存在。