gpt4 book ai didi

从存储库历史记录中删除大文件后,Git 存储库仍然很大

转载 作者:太空狗 更新时间:2023-10-29 13:16:19 26 4
gpt4 key购买 nike

我有一个代码库(直到现在)使用 git 来存储它的依赖项。存储库本身 is available here (警告:它是巨大的)。不用说,我需要从存储库历史记录中删除依赖项,以便将其减少到合理的大小。

我开始使用 David Underhill's instructions从历史中删除 lib 目录。然而,即使在这样做之后,存储库仍然超过 300M。发布 git prunegit repack 有帮助,但它仍然超过 180M。

为了找到任何臃肿的 Blob ,我发布了

git verify-pack -v .git/objects/pack/pack-*.idx | grep -v chain | sort -k3nr | head

结果如下:

105526b5d3d398b9989d88c2f9fc2d1dc96a85b8 blob 35685609 33600527 31978828 d296935e6ac5f3f58b50c789394c9769116e9c34 blob 35658016 33593241 112485744 50636f931180a32764edadd854968a971a083f8a blob 28360290 25897864 233390 b9e4dd37428e879a258f297b7f5bcfb9ba869695 blob 13108002 11640713 66661788 08d2720b2414aa07ce419b17d5f80c333c7313b7 blob 12551621 11124009 89231035 6197a478a461275a0396f20c28487e9ae619a5f9 blob 11975135 11058259 148211988 1 50636f931180a32764edadd854968a971a083f8a 549eb0c73776fd0ede27a2fcb03366f76f45a13c blob 9136086 8166649 166451273 5bc0a0f04a7004bc16cfab1c091c6b369fb74049 blob 9072616 8270262 80951514 741480238a6a6ce612cf089245dd46d6890fba9f blob 8858569 8080252 101294029 744226651c55b14c1aa8affb78fba4fdf02b577c blob 7412220 6766404 186825167

这就是我卡住的地方。我可以 git show 这些 blob 并看到它们看起来非常像 jar 文件,但我不明白为什么它们仍在 repo 中。

各种尝试find their filenames失败的。

git repack -agit repack -adgit repack -Ad 似乎都没有效果。

最佳答案

在 git gc 上使用 --prune=now

虽然您已经成功地将不需要的对象从历史记录中写入,但看起来这些不需要的对象没有被修剪,因为它们太年轻默认情况下不能被修剪(参见 configuration docs git gc 了解更多细节)。使用 git gc --prune=now 应该可以解决这个问题,或者您可以看到 this answer一个更核的选择。

虽然这应该可以解决您的最后一个问题,但潜在的问题是难以找到大的 blob 以便使用 git filter-branch 删除它们 - 我会这样做说:

...不要使用 git filter-branch

git filter-branch 用于这样的任务很痛苦,有一个更好但鲜为人知的工具叫做 The BFG专门设计用于从 Git 存储库中删除大文件

删除大文件的核心命令如下所示:

$ bfg  --strip-blobs-bigger-than 10MB  my-repo.git

任何大小超过 10MB 的 blob(不在您的最新提交中)都将从您的存储库历史记录中完全删除 - 您无需手动查找你自己的文件和 protected 提交中的文件是 safe .

然后您可以使用 git gc 清除死数据:

$ git gc --prune=now --aggressive

BFG 通常是 hundreds of times faster而不是在大型存储库上运行 git-filter-branch 并且选项是围绕这两个常见用例量身定制的:

  • 删除疯狂的大文件
  • 删除密码、凭据和其他私有(private)数据

完全披露:我是 BFG Repo-Cleaner 的作者。

关于从存储库历史记录中删除大文件后,Git 存储库仍然很大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6884331/

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