maven项目中解决 .git文件太大问题
一、git项目上传后项目文件太大,git filter-branch手动清理
最近发现一个项目git目录已经达到200MB,严重影响了clone代码。操作之前请全量备份代码,操作失误可恢复
二、测试项目存储主键增大流程
2.1、建立远程仓库
为了模拟团队协作,需要一个远程仓库,可以选择GitHub或码云上建立仓库,这里选择码云 ,仓库名字为 gitthin,地址为 git@gitee.com:coderhony/gitthin.git。
2.2、克隆代码到本地
cd ~/Desktop/
git clone git@gitee.com:coderhony/gitthin.git
2.3 模拟提交操作,开始写代码提交
echo -n "战国是一个群国争雄的时代,今天的故事就从战国开始" > zhanguo.txt
git add .
git commit -m "创建了zhanguo.txt文件"
echo -n "战国的开端是由赵魏韩三家分晋开始,从此战国进入七雄争霸的时代" >> zhanguo.txt
git add .
git commit -m "战国开端"
echo -n "这七个国家分别是:秦、齐、楚、燕、魏、赵、韩" >> zhanguo.txt
git add .
git commit -m "七个国家的名字"
echo -n "秦国地处西陲,楚国位居南方,齐国傲居东海,燕国地处北面,魏国、赵国、韩国三国在中间" >> zhanguo.txt
git add .
git commit -m "七国的地理位置"
# 切换分支
git checkout -b qinguo
echo -n "战国开始时,秦国还比较贫弱,一直受东边的魏国欺负,今天魏国夺占五城,明天秦国抢回三城,一直处于这种状态" > qinguo.txt
git add .
git commit -m "创建了qinguo.txt文件"
echo -n "当时的魏国很强大,魏文侯时期,启用李悝变法,使魏国经济富庶,后来有任用吴起训练魏武卒,一直不断蚕食着秦国" >> qinguo.txt
git add .
git commit -m "秦国受魏国欺负"
echo -n "这种情况到秦孝公时开始有所好转,秦孝公启动商鞅,进行变法,奖励农耕,奖励军功,经过了二十年,秦国已不容小觑矣" >> qinguo.txt
git add .
git commit -m "秦孝公启用商鞅变法"
2.4 生成大文件
perl -le 'for (1..1000000) { print map { (0..9, "a".."z")[rand 36] } 1..80 }' > bigqin
git add .
git commit -m "商鞅变法,秦国战斗力直线上升"
在该大文件的内容后面,追加一些内容:
perl -le 'print map { (0..9, "a".."z")[rand 36] } 1..80' >> bigqin
git add .
git commit -m "又过几年,秦国的战斗力又提高了很多"
2.5 查看生成的大文件
查看大小为109M
du -sh .git
2.6正常提交
echo -n "秦国变法后一百年,国力不断增强,其他诸侯为之色变,王霸之业已不能满足,开始横扫六合,一统天下,终于在嬴政时期得以实现" >> qinguo.txt
git add .
git commit -m "秦国一统天下"
2.7 切换分支
git checkout master
echo -n "其他六国不断被秦国攻打,闻之色变,但又没有及时变法,寻求强大之道,之后逐个被秦国所灭" >> zhanguo.txt
git add .
git commit -m "其他六国逐个被秦国所灭"
2.8 提交到远端
git push origin qinguo
2.9 切换master继续提交
git checkout master
echo -n "其他六国不断被秦国攻打,闻之色变,但又没有及时变法,寻求强大之道,之后逐个被秦国所灭" >> zhanguo.txt
git add .
git commit -m "其他六国逐个被秦国所灭"
2.10 合并代码
git merge qinguo
2.11 【核心】清理大文件bigqin 100多MB文件
先垃圾回收
git gc --prune=now
Git最初向磁盘中存储对象使用松散的格式,后续会将多个对象打包为一个二进制的包文件(packfile),以节省磁盘空间
2.12 查找大文件
git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -3 | awk '{print$1}')"
2.13 删除指定的大文件
git filter-branch --force --index-filter "git rm -rf --cached --ignore-unmatch 文件名usql_server_jar/usql-server.jar" --prune-empty --tag-name-filter cat -- --all
2.14 删除缓存,执行后发现.git磁盘存储已经降低
git for-each-ref --format='delete %(refname)' refs/original | git update-ref --stdin
git reflog expire --expire=now --all
git gc --prune=now
du -sh .git
2.15 推送远端
需要先把git master分支保护去除
方式1推荐:替换指定分支git push origin master --force
方式2公司无法执行:git push --mirror http://替换为git地址/替换为项目名.git
方式3:替换远端所有分支git push origin --force --all
参考文档:https://www.jianshu.com/p/7ace3767986a