我正在尝试克隆历史记录中包含大量 blob 的存储库,并且希望仅在特定提交时下载文件,而不需要任何额外的开销或冗余。
尝试
git clone --depth 1
时,.git
目录变得相当大。 这似乎是因为包文件很大,其文件大小对应于 git 在 Receiving objects:
时报告的大小。 使用 git verify-pack
检查 packfile 表明它包含大量 blob 信息。
但是,尝试
git clone --filter=blob:none
仍然会产生同样大的包文件,列出 blob。
我的期望是
--depth 1
不应该下载任何历史记录,并且 filter=blob:none
不应该下载任何 blob 历史记录。
那么为什么我的
.git
目录中会填充浅克隆的包文件开销?
我想知道这是否可能是我签出的单个提交的初始压缩下载 - 但即便如此,我怎样才能防止这个冗余文件持续存在?
作为具体参考,我克隆的存储库是ARM-software/CMSIS_5。
这开始是一个关于浅层子模块的问题,并且只在特定提交时下载文件而没有开销,但包文件开销似乎与一般克隆有关,所以我想我应该从这里开始。
使用 git verify-pack 检查 packfile 表明它包含大量 blob 信息。
当你跑步时...
git clone --filter blob:none --depth 1 https://github.com/ARM-software/CMSIS_5
...您仍在从存储库中签出工作副本。相关存储库中有超过 3000 个文件:
$ find * -type f -print | wc -l
3225
由于文件内容存储在 blob 中,这意味着无论
blob:none
过滤器如何,git
仍然需要传输与 HEAD 提交中的文件相对应的 blob,因此我们预计会看到类似的大小包文件中的 blob。事实上,在运行上述命令后,我们看到:
$ git verify-pack -v .git/objects/pack/pack-b0279f34420775288c089456dfc84f2697570837.pack |
grep blob | wc -l
2807