首页 > 解决方案 > 关于看起来未使用的 git big blob 的问题

问题描述

按照gitlab doc 中的文档:reducing_the_repo_size_using_git我正在从 GitLab 清理一个 repo,所以我将其导出,通过电子邮件获取链接,下载并解压。

aaa_export$ git clone --bare --mirror  project.bundle
Cloning into bare repository 'project.git'...
Receiving objects: 100% (109830/109830), 627.15 MiB | 63.75 MiB/s, done.
Resolving deltas: 100% (89023/89023), done.
aaa_export$
$ du -sh project.git
633M
$

然后我清理不必要的文件并优化本地存储库:

$ git gc --prune=now --aggressive
Enumerating objects: 109830, done.
Counting objects: 100% (109830/109830), done.
Delta compression using up to 4 threads
Compressing objects: 100% (108121/108121), done.
Writing objects: 100% (109830/109830), done.
Selecting bitmap commits: 13458, done.
Building bitmaps: 100% (238/238), done.
Total 109830 (delta 89020), reused 19482 (delta 0)
$
$ du -sh project.git
633M    # Not a surprise this working copy came from a gitlab export
$

出于好奇,我在我的 repo 中寻找最大的 blob:

$ git verify-pack -v objects/pack/*idx |sort -n -k3 |tail -3
24c41d1b2132daac9a13910f839173da3890c991 blob   13464592 8520894 149667646
28678d4814faecf8c20a3c893e1ac93cd159a289 blob   19558229 19538291 167335758
8103683624212caadee8e609295addd24ec43db1 blob   21805631 15702989 237885293
$

所以我尝试从更大的 blob 中获取提交对象列表:

$ git cat-file -t 810368362
blob
$
$ git rev-list --objects --all | grep 8103683624
$

使用哪个提交具有此 blobgit whatchanged中公开的a 时相同

$ git whatchanged --all --find-object=8103683624
$ 

所以我很惊讶有这么大的斑点,什么都没有:

SHA-1                                    type   size     size-in-packfile offset-in-packfile
8103683624212caadee8e609295addd24ec43db1 blob   21805631 15702989         237885293

我怎么知道这个 blob 是干什么用的?

注意:我们在一个裸存储库中,所以 git log diff 和 describe 不适用这就是为什么which-commit-has-this-blob/#VonCgit log --find-object=<object-id>这里不适用,顺便说一下 which-commit-has-this-blob问题是围绕创建一个中央 Git 存储库而不是关于理解一个大博客如何引用无提交/树

标签: gitgitlabgit-filter-repo

解决方案


推荐阅读