Git项目过大清理(针对大文件)
一、问题说明#
如图,由于之前上传了一些比较大的文件,导致项目太大。即使后来删除,记录中还是保存了这个文件。以后不管是拷贝,还是push/pull都比较麻烦。这会导致所有人每次git fetch
需要浪费很多时间。查看项目仓库大小可以使用命令git count-objects -vH
。
如图,我的项目已经超过4G了,下面进行清理。
切记: 大文件需要添加到 .gitignore文件
二、解决方法#
1、拉取项目:将项目所有分支拉下来#
2. 查看有哪些大文件#
git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -10 | awk '{print$1}')"
这里查询最大的前10个,然后观察其中是否有需要删除的大文件,比如这里是测试视频和模型权重,都应该删除。
3. 移除对该文件的引用#
git filter-branch --force --index-filter 'git rm -rf --cached --ignore-unmatch 文件/文件夹' --prune-empty --tag-name-filter cat -- --all
文件如:5.mp4
文件夹如:/models/
注意:一次只能处理一个文件/文件夹,如果有多个需要耐心处理。
4. 回收空间,清理本地仓库中不可到达的对象#
git for-each-ref --format=‘delete %(refname)‘ refs/original | git update-ref --stdin
rm -rf .git/refs/original/
git reflog expire --expire=now --all
git gc --prune=now
git gc --aggressive --prune=now
5. 推送到服务器,清理远程仓库#
git push origin --force --all
git remote prune origin
完成后拉取项目将会变小,但是Gitlab的项目的大小并不会变化。不过后面拉取项目会变小,也变成700M了
5. 注意#
清理完之后,每个人一定要删掉之前拉取的项目, 重新从git上拉项目。不要使用之前的项目了!否则会不降反升!
这是赤裸裸教训
三、清理服务器缓存#
如果有条件进入到Gitlab服务部署目录,可以对远程仓库进行确认和瘦身。(没有条件,没有尝试)
sudo su
cd ${gitlab项目部署目录}/git-data/repositories/{待清理的项目地址}
git count-objects -vH # 此时还是旧的大小
git gc --prune=now # 清理无效文件
git count-objects -vH # 此时就和本地一样,从库减小了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理