为什么`git clone --深度1`会留下packfiles?

问题描述 投票:0回答:1

我正在尝试克隆历史记录中包含大量 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 version-control git-clone internals shallow-clone
1个回答
0
投票

使用 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
© www.soinside.com 2019 - 2024. All rights reserved.