git文件夹瘦身

git历史commit中可能包含一些build文件夹,想要删掉缩小git大小。主要参考:

git: 如何减少.git文件的大小?_.git瘦身-CSDN博客

一、查看git中文件大小

bash 复制代码
# 查看.git中前十位大小的文件 (hash值, 大小Byte)
git verify-pack -v .git/objects/pack/pack-*.idx | sort -k 3 -g | tail -10

# 查看某个hash值对应的文件名(把下面ID替换成hash值)
git rev-list --objects --all | grep ID

或者直接列出前十位最大的文件名:

bash 复制代码
git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -10 | awk '{print$1}')"

二、删除git中大文件

bash 复制代码
# 删除单个文件(下方文件名替换,可以用*来缺省,如 pictures/2024*.jpg)
git filter-branch --force --index-filter "git rm --cached --ignore-unmatch '文件名'" --prune-empty --tag-name-filter cat -- --all

# 删除目录下所有文件,多了-r (看清楚文件夹,谨慎用)
git filter-branch --force --index-filter "git rm --cached --ignore-unmatch -r '文件夹名'" --prune-empty --tag-name-filter cat -- --all

用上方指令逐个删除大文件,成功会显示 Rewrite xxxx(233/666),相应commit被改写

然后更新git缓存

bash 复制代码
git for-each-ref --format='delete %(refname)' refs/original | git update-ref --stdin
git reflog expire --expire=now --all
git gc --prune=now

这时候查看.git文件夹大小就能发现小了很多。

bash 复制代码
# 查看git仓库大小
git count-objects -vH

三、服务器端同步

强制推送到远端仓库**(慎用!会覆盖所有远端的新提交)**

bash 复制代码
# 强制推送到远端仓库(慎用!会覆盖所有远端的新提交)
git push origin master --force

如果远端服务器(如github或者gitee)拒绝,则应当在对应网站仓库设置里点击允许强制推送。

虽然本地的git文件夹缩小了,但是gitee仓库的大小好像并没有改变(通过网页端"统计"来查看,或者git clone看一下大小),这和服务器端缓存有关系。有的服务器端如gitlab可以通过仓库里清理GC来更新大小,但我试了gitee仓库也没用。

最后只能新建了一个仓库,将本地git仓库同步上去。

相关推荐
新镜2 小时前
【git】 曾经合入的文件被删除,再次合入时,相同的文件路径并不会自动合入
git
console.log('npc')3 小时前
git commit之后,想撤销commit
git
春日见3 小时前
UniAD的逻辑,与传统自动驾驶的差异
人工智能·windows·git·机器学习·docker·容器·自动驾驶
奋斗者1号3 小时前
解决Git Push Gerrit分支失败的全流程实战
大数据·git·elasticsearch
alanesnape4 小时前
在 Surface Pro X (ARM64) 上成功部署 Claude Code 的完整复盘
git·node.js·claude code部署·msys2clangarm64·美区apple id·礼品卡支付·surface pro x
SouthRosefinch4 小时前
Git下载与仓库配置
git
ChoSeitaku4 小时前
Git实战|协作开发|分支设计规范|Git实践
git·设计规范
i建模5 小时前
Git升级的详细操作
git
不爱学英文的码字机器17 小时前
Git误操作急救手册大纲
git
A懿轩A17 小时前
【2026 最新】Mac 电脑配置指南:Homebrew 安装换源 + Git 环境配置(保姆级教程)
git