【Git】Git瘦身,清理Git历史提交/.git大文件清理(云效、UI 自动化项目)

2024-01-18 02:30

本文主要是介绍【Git】Git瘦身,清理Git历史提交/.git大文件清理(云效、UI 自动化项目),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目前项目是存在云效(codeup.aliyun.com)上
本地清理后,还需要到云效上清理「存储空间管理」

      • 一、清理/瘦身效果
      • 二、到底是什么在占空间?
          • 1、先看一下项目里,什么最占空间?
          • 2、往下看在/.git里,什么最占空间?
      • 三、清理/瘦身过程
          • 1、git命令修改大文件提交记录
            • (1)查看历史提交中占用空间最多的10个文件
            • (2)重写提交记录,删除提交记录里面的大文件(删`data/apks/large.apk`)
            • (3)清理本地缓存+强推到远端
            • (4)本项目是存在云效codeup上,还需要到云效上手动清理下服务器缓存
            • (5)本地查看 & 远程查看效果
          • 2、BFG工具
            • (1)BFG下载到本地,改个名字-> bfg.jar
            • (2)镜像下载待瘦身项目
            • (3)用BFG清理文件
            • (4)本地清理+提交到远程

一、清理/瘦身效果


清理前:451.11M


清理后:12.68M
在这里插入图片描述

结论:清理效果喜人,清除了97%无用大文件提交 🥳




二、到底是什么在占空间?

在项目不断提交过程中,提交过一些大文件如:apk,ipa文件,
这类文件动不动3、40M,就算之后删掉这些大文件,.git提交里还是存着——

就这样在不断提交中,把整个项目扩张成一个非常大/占空间的项目。


1、先看一下项目里,什么最占空间?
~/project (xx ✔)du -d 1 -h 
524K    ./page48K    ./.pytest_cache16K    ./shell
4.0K    ./__pycache__
216K    ./common
2.2M    ./log0B    ./report
482M    ./.git
1.6M    ./data
684K    ./testcases40K    ./.idea
487M    .

首先确定项目里,最占空间的是.git

482M    ./.git
2、往下看在/.git里,什么最占空间?
/.git (master ✔)du -d 1 -h
448M	./objects
4.0K	./info12K	./logs60K	./hooks
8.0K	./refs
448M	.
# 448M	./objects 最大/.git/objects (master ✔)du -d 1 -h
448M	./pack0B	./info
448M	.
# 448M	./pack 最大.git/objects/pack (master ✔) ᐅ ll
total 916904
-r--r--r--  1 xxx  staff   287K Sep 15 17:31 pack-qqqqqqqqq.idx
-r--r--r--  1 xxx  staff   447M Sep 15 17:31 pack-wwwwwwwww.pack
# 447M Sep 15 17:31 pack-wwwwwwwww.pack 最大

破案,.git 里最占空间的是——/objects/pack
我们本次清理, 其实就是清理/objects/pack里的大文件。





三、清理/瘦身过程

⚠️⚠️⚠️
都直接在master分支操作,提前做好备份
⚠️⚠️⚠️

有2种方法清理:
(1)git命令修改大文件提交记录
(2)BFG工具


1、git命令修改大文件提交记录
(1)查看历史提交中占用空间最多的10个文件
project (master ✔)git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -10 | awk '{print$1}')"781f20bbd24b3c23eb7a706044ad6147cd9931b0 data/apks/large.apk
8c38ebb58c15adf81bb297db883e2c29eb1f64f5 data/apks/large.apk
cf7fe36048b822bc9c1784a6d68dd1ded177dd29 data/apks/large.apk
ff99a5b3486af7e47af3136d7630d18c3f8a0a14 data/apks/large.apk
878fe9c837664bc57082a011e16a779ec7562f4b data/apks/large.apk
ec9272fcbfc7e1dc3e318fe8c5805066a420b451 data/apks/large.apk
332bccff3731c2f67d8994908887bc9ae2131781 data/apks/large.apk
6aa7f12c992ec6a19372d13a6d1b47b0aef95e18 data/apks/large.apk
15525f8df6f2a04c5bb7b40b78a8959762c2f3db venv/lib/python3.9/site-packages/lxml/etree.cpython-39-darwin.so

提交最多的就是data/apks/large.apk

(2)重写提交记录,删除提交记录里面的大文件(删data/apks/large.apk
project (master ✔)git filter-branch --force --index-filter 'git rm -rf --cached --ignore-unmatch data/apks/large.apk' --prune-empty --tag-name-filter cat -- --all
WARNING: git-filter-branch has a glut of gotchas generating mangled historyrewrites.  Hit Ctrl-C before proceeding to abort, then use analternative filtering tool such as 'git filter-repo'(https://github.com/newren/git-filter-repo/) instead.  See thefilter-branch manual page for more details; to squelch this warning,set FILTER_BRANCH_SQUELCH_WARNING=1.
Proceeding with filter-branch...Rewrite xxxccd26da5ecca698b61f85a0be378 (330/991) (41 seconds passed, remaining 82 predicted)    rm 'data/apks/large.apk'
Rewrite fae60972169db924e4e38ae2bbc5987a786224f7 (794/991) (98 seconds passed, remaining 24 predicted)    rm 'data/apks/large.apk'
Rewrite xxxc8cfe79b44e98d85f430b86c40af (803/991) (99 seconds passed, remaining 23 predicted)    rm 'data/apks/large.apk'
Rewrite xxx0394d9776a885567ffdb9368943 (983/991) (121 seconds passed, remaining 0 predicted)     
Ref 'refs/heads/master' was rewritten
Ref 'refs/heads/xxx' was rewritten
Ref 'refs/heads/qqq' was rewritten
Ref 'refs/heads/www' was rewritten
Ref 'refs/heads/eee' was rewritten
Ref 'refs/heads/rrr' was rewritten
Ref 'refs/heads/ttt' was rewritten
(3)清理本地缓存+强推到远端
rm -rf .git/refs/original/
git reflog expire --expire=now --all && git gc --prune=now --aggressivegit push --force
git remote prune origin  
(4)本项目是存在云效codeup上,还需要到云效上手动清理下服务器缓存

在这里插入图片描述

(5)本地查看 & 远程查看效果

本地:

project (master ✔)du -d 1 -h
252K	./page16K	./shell
104K	./common0B	./log0B	./report13M	./.git
1.6M	./data
212K	./testcases15M	.

远程:
在这里插入图片描述
清理完成✅



2、BFG工具
(1)BFG下载到本地,改个名字-> bfg.jar

BFG下载

(2)镜像下载待瘦身项目

$ git clone --mirror git://xxx.com/project.git

(3)用BFG清理文件

文件:large.apk

java -jar bfg.jar --delete-folders .git --delete-files large.apk  --no-blob-protection  project.gitUsing repo : /Users/xxx/project.gitFound 0 objects to protect
Found 19 commit-pointing refs : HEAD, refs/heads/xxx, refs/heads/www, ...Protected commits
-----------------You're not protecting any commits, which means the BFG will modify the contents of even *current* commits.This isn't recommended - ideally, if your current commits are dirty, you should fix up your working copy and commit that, check that your build still works, and only then run the BFG to clean up your history.Cleaning
--------Found 1298 commits
Cleaning commits:       100% (1298/1298)
Cleaning commits completed in 636 ms.
(4)本地清理+提交到远程
cd project.git
git reflog expire --expire=now --all && git gc --prune=now --aggressivegit push --force

这篇关于【Git】Git瘦身,清理Git历史提交/.git大文件清理(云效、UI 自动化项目)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/617870

相关文章

部署Vue项目到服务器后404错误的原因及解决方案

《部署Vue项目到服务器后404错误的原因及解决方案》文章介绍了Vue项目部署步骤以及404错误的解决方案,部署步骤包括构建项目、上传文件、配置Web服务器、重启Nginx和访问域名,404错误通常是... 目录一、vue项目部署步骤二、404错误原因及解决方案错误场景原因分析解决方案一、Vue项目部署步骤

golang内存对齐的项目实践

《golang内存对齐的项目实践》本文主要介绍了golang内存对齐的项目实践,内存对齐不仅有助于提高内存访问效率,还确保了与硬件接口的兼容性,是Go语言编程中不可忽视的重要优化手段,下面就来介绍一下... 目录一、结构体中的字段顺序与内存对齐二、内存对齐的原理与规则三、调整结构体字段顺序优化内存对齐四、内

配置springboot项目动静分离打包分离lib方式

《配置springboot项目动静分离打包分离lib方式》本文介绍了如何将SpringBoot工程中的静态资源和配置文件分离出来,以减少jar包大小,方便修改配置文件,通过在jar包同级目录创建co... 目录前言1、分离配置文件原理2、pom文件配置3、使用package命令打包4、总结前言默认情况下,

python实现简易SSL的项目实践

《python实现简易SSL的项目实践》本文主要介绍了python实现简易SSL的项目实践,包括CA.py、server.py和client.py三个模块,文中通过示例代码介绍的非常详细,对大家的学习... 目录运行环境运行前准备程序实现与流程说明运行截图代码CA.pyclient.pyserver.py参

10个Python自动化办公的脚本分享

《10个Python自动化办公的脚本分享》在日常办公中,我们常常会被繁琐、重复的任务占据大量时间,本文为大家分享了10个实用的Python自动化办公案例及源码,希望对大家有所帮助... 目录1. 批量处理 Excel 文件2. 自动发送邮件3. 批量重命名文件4. 数据清洗5. 生成 PPT6. 自动化测试

10个Python Excel自动化脚本分享

《10个PythonExcel自动化脚本分享》在数据处理和分析的过程中,Excel文件是我们日常工作中常见的格式,本文将分享10个实用的Excel自动化脚本,希望可以帮助大家更轻松地掌握这些技能... 目录1. Excel单元格批量填充2. 设置行高与列宽3. 根据条件删除行4. 创建新的Excel工作表5

Redis 多规则限流和防重复提交方案实现小结

《Redis多规则限流和防重复提交方案实现小结》本文主要介绍了Redis多规则限流和防重复提交方案实现小结,包括使用String结构和Zset结构来记录用户IP的访问次数,具有一定的参考价值,感兴趣... 目录一:使用 String 结构记录固定时间段内某用户 IP 访问某接口的次数二:使用 Zset 进行

Git提交代码详细流程及问题总结

《Git提交代码详细流程及问题总结》:本文主要介绍Git的三大分区,分别是工作区、暂存区和版本库,并详细描述了提交、推送、拉取代码和合并分支的流程,文中通过代码介绍的非常详解,需要的朋友可以参考下... 目录1.git 三大分区2.Git提交、推送、拉取代码、合并分支详细流程3.问题总结4.git push

IDEA运行spring项目时,控制台未出现的解决方案

《IDEA运行spring项目时,控制台未出现的解决方案》文章总结了在使用IDEA运行代码时,控制台未出现的问题和解决方案,问题可能是由于点击图标或重启IDEA后控制台仍未显示,解决方案提供了解决方法... 目录问题分析解决方案总结问题js使用IDEA,点击运行按钮,运行结束,但控制台未出现http://

解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题

《解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题》文章详细描述了在使用lombok的@Data注解标注实体类时遇到编译无误但运行时报错的问题,分析... 目录问题分析问题解决方案步骤一步骤二步骤三总结问题使用lombok注解@Data标注实体类,编译时