清理git服务器上的大文件

有人意外地将一些大型(多GB)二进制文件提交给我自己托管的gitlab存储库,现在每当有人试图从存储库中取出时,服务器就会受到严重打击.

我尝试通过强制推送删除对文件的任何引用,但它似乎仍然影响服务器.有没有办法强制gitlab服务器摆脱它?

我读了一些像filter-branch这样的东西,但我不确定那会对裸仓库做什么,或者我甚至在提交时使用它我不再有引用.

更新:作为参考,这些类型的消息出现在gitlab VM的控制台上:

[ 5099.922896] Out of memory: kill process 6200 (git-upload-pack) score 1053982 or a child
[ 5099.922908] Killed process 6202 (git)
[ 5099.930796] Out of memory: kill process 6200 (git-upload-pack) score 360394 or a child
[ 5099.930807] Killed process 6203 (git)
[ 5099.938875] Out of memory: kill process 6200 (git-upload-pack) score 360394 or a child
[ 5099.938886] Killed process 6203 (git)
[ 5099.951163] Out of memory: kill process 6139 (git-upload-pack) score 324327 or a child
[ 5099.951174] Killed process 6151 (git)
最佳答案
OP Karl确认in the comments时,在服务器端运行BFG repo cleaner(直接在裸仓库中)足以删除大型二进制文件.

如果您遵循(如“Git – Delete a Blob”中所述):

rm -rf .git/refs/original/
git reflog expire --expire=now --all
git gc --prune=now
git gc --aggressive --prune=now

但也(“git gc --aggressive vs git repack”):

git gc
git repack -Ad      # kills in-pack garbage
git prune           # kills loose garbage

你最终应该有一个更纤薄,更小的裸露回购.

转载注明原文:清理git服务器上的大文件 - 代码日志