Aar*_*rup 5 git git-rewrite-history
我有一个代码库(到现在为止)使用git来存储它的依赖项.存储库本身在这里可用(警告:它是巨大的).不用说,我需要从存储库历史记录中删除依赖项,以便将其减少到合理的大小.
我首先使用David Underhill的说明lib从历史记录中删除目录.然而,即使在这样做之后,存储库仍然超过300M.发布git prune和git repack帮助,但它仍然超过180M.
为了找到任何臃肿的斑点,我发出了
git verify-pack -v .git/objects/pack/pack-*.idx | grep -v chain | sort -k3nr | head
Run Code Online (Sandbox Code Playgroud)
结果如下:
105526b5d3d398b9989d88c2f9fc2d1dc96a85b8斑点35685609 33600527 31978828 d296935e6ac5f3f58b50c789394c9769116e9c34团块35658016 33593241 112485744 50636f931180a32764edadd854968a971a083f8a团块28360290 25897864 233390 b9e4dd37428e879a258f297b7f5bcfb9ba869695团块13108002 11640713 66661788 08d2720b2414aa07ce419b17d5f80c333c7313b7团块12551621 11124009 89231035 6197a478a461275a0396f20c28487e9ae619a5f9团块11975135 11058259 148211988 1 50636f931180a32764edadd854968a971a083f8a 549eb0c73776fd0ede27a2fcb03366f76f45a13c团块9136086 8166649 166451273 5bc0a0f04a7004bc16cfab1c091c6b369fb74049团块9072616 8270262 80951514 741480238a6a6ce612cf089245dd46d6890fba9f团块8858569 8080252 101294029 744226651c55b14c1aa8affb78fba4fdf02b577c团块7412220 6766404 186825167
这就是我被困住的地方.我可以git show看到这些blob并看到它们看起来非常像jar文件,但我无法弄清楚为什么它们仍然在回购中.
查找文件名的各种尝试都失败了.
git repack -a,git repack -ad和git repack -Ad一切似乎都没有影响.
Rob*_*ley 13
--prune=now在git gc上使用虽然您已经成功地从历史记录中编写了不需要的对象,但看起来这些不需要的对象没有被修剪,因为它们太小而无法在默认情况下进行修剪(有关详细信息,请参阅配置文档git gc).使用git gc --prune=now应该处理,或者您可以看到更多核选项的答案.
虽然这应该可以解决你的最终问题,但是一个潜在的问题是难以找到大blob以便使用git filter-branch它来删除它们- 我会说:
git filter-branch是痛苦的使用像这样的任务,并有一个更好的,不太知名的工具,称为该BFG,专门用于去除大文件从Git的回购协议.
删除大文件的核心命令如下所示:
$ bfg --strip-blobs-bigger-than 10MB my-repo.git
Run Code Online (Sandbox Code Playgroud)
任何大小超过10MB的blob(不在最近的提交中)都将从存储库的历史记录中完全删除 - 您不必自己手动查找文件,受保护的提交中的文件是安全的.
然后,您可以使用git gc清除死数据:
$ git gc --prune=now --aggressive
Run Code Online (Sandbox Code Playgroud)
BFG通常比在大型仓库上运行快数百倍,git-filter-branch并且选项是围绕这两个常见用例量身定制的:
完全披露:我是BFG Repo-Cleaner的作者.
你尝试过跑步git gc吗?http://www.kernel.org/pub/software/scm/git/docs/git-gc.html