git仓库中.git 文件很大,怎么清理掉一部分
查询 .git 文件大小,在 git-bash 里执行(后面有些命令不能执行,也请在 git-bash 里执行)
windows11 安装好后右键没有 git bash 命令-CSDN博客
du -sh .git
// 592m .git
操作前最好先备份一份,避免推送到远程时出错
直接用第 5 个方法,前 4 个方法没什么用,只做记录
1、直接删除根目录下的.git文件夹:但这样会丢失git历史记录,不建议使用
2、清理松散对象(作用不大):
最好别用,用了后下面删除全部 tag 时报找不到文件的错了。
git gc --prune=now
强制立即删除未被引用的对象。减小了 3m 作用不大。
3、使用git branch和git tag命令清除本地的分支和标签(对 .git 文件作用不在)
查看分支
git branch
删除分支
git branch -d <branch-name>
删除远程分支,谨慎使用
git push origin --delete <branch-name>
查询本地 tag
git tag
删除本地 taggit tag -d v1.0
删除远程 tag,谨慎使用git push --delete origin v1.0
删除所有本地 taggit tag -d $(git tag -l)
删除所有远程 tag,尽量别用git push origin --delete $(git tag -l)
删除所有本地 tag 时遇到下面错误
error: could not delete references: cannot lock ref 'refs/tags/v2.0.12-hotfix.0': Unable to create 'D:/保存/test/web/.git/refs/tags/v2.0.12-hotfix.0.lock': File exists.
Another git process seems to be running in this repository, e.g.
an editor opened by 'git commit'. Please make sure all processes
are terminated then try again. If it still fails, a git process
may have crashed in this repository earlier:
remove the file manually to continue.
单独删除这个 tag
git tag -d v2.0.12-hotfix.0
使用下面命令释放删除的 分支 和 tag 空间
git gc --prune=now --aggressive
577m 减小了 8m,不痛不痒呀
4、使用git filter-branch命令:
删除仓库中的大文件或误添加的文件,很慢而且作用也不大
查找 .git 文件发现只有 .git\objects\pack 中的文件比较大,但不可直接删除。
删除了发现不能查看提交履历,赶紧退回。
可以使用以下命令来查找并删除这些大文件:
# 查找最大的文件
git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -5 | awk '{print$1}')"# 删除大文件
git filter-branch --force --index-filter "git rm -r --cached --ignore-unmatch path/to/big/file" --prune-empty --tag-name-filter cat -- --all
git for-each-ref --format='delete %(refname)' refs/original/ | git update-ref --stdin
git reflog expire --expire=now --all
git gc --prune=now --aggressive
也没减小多少。
上面这些不好使可能 没更改远程,可以fork 一下公司项目,然后在自己项目上调试,毕竟公司程序不让更改
5、使用BFG
BFG是一个非常有用的工具,可以帮助你移除大文件或敏感数据,而不需要完全重写历史记录。使用BFG的步骤如下:(电脑需要配置 java 环境)
下载BFG工具
https://repo1.maven.org/maven2/com/madgag/bfg/1.9.0/bfg-1.9.0.jar
支持 java8 的版本:https://repo1.maven.org/maven2/com/madgag/bfg/1.14.0/bfg-1.14.0.jar
使用方法一:
查找大文件:
git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -5 | awk '{print$1}')"
逐一删除大文件记录:
注意:--delete-files 后面只能跟文件名,不能带路径,这样写是错误的
java -jar bfg-1.14.0.jar --delete-files /src/assets/font/SourceHanSansCN-Medium.otf /d/保存/test/web
解决办法:
cd src/assets/font/
java -jar ../../../bfg-1.14.0.jar --delete-files SourceHanSansCN-Medium.otf /d/保存/test/web
如果在 cmd 下执行这个命令,工程地址要写成 D:\保存\test\web
git reflog expire --expire=now --all && git gc --prune=now --aggressive
使用方法二:
bfg 推荐的优化(删除大于50M的文件):
java -jar bfg-1.14.0.jar --strip-blobs-bigger-than 50M /d/保存/test/web
git reflog expire --expire=now --all && git gc --prune=now --aggressive
commit记录还在,但是已经打不开文件了,很好
du -sh .git
// 123m .git
减小了 400 m,很好
然后,将更改推送到远程仓库:
git push origin --force --all
git push origin --force --tags