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

这篇具有很好参考价值的文章主要介绍了【Git】Git瘦身,清理Git历史提交/.git大文件清理(云效、UI 自动化项目)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

一、清理/瘦身效果


清理前:451.11M
git提交日志太多占内存,各种命令-git/shell/adb/linux,git,自动化,经验分享,python,appium

清理后:12.68M
git提交日志太多占内存,各种命令-git/shell/adb/linux,git,自动化,经验分享,python,appium

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




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

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

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


1、先看一下项目里,什么最占空间?
~/project (xx ✔)du -d 1 -h 
524K    ./page
 48K    ./.pytest_cache
 16K    ./shell
4.0K    ./__pycache__
216K    ./common
2.2M    ./log
  0B    ./report
482M    ./.git
1.6M    ./data
684K    ./testcases
 40K    ./.idea
487M    .

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

482M    ./.git
2、往下看在/.git里,什么最占空间?
/.git (master ✔)du -d 1 -h
448M	./objects
4.0K	./info
 12K	./logs
 60K	./hooks
8.0K	./refs
448M	.
# 448M	./objects 最大

/.git/objects (master ✔)du -d 1 -h
448M	./pack
  0B	./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 history
         rewrites.  Hit Ctrl-C before proceeding to abort, then use an
         alternative filtering tool such as 'git filter-repo'
         (https://github.com/newren/git-filter-repo/) instead.  See the
         filter-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 --aggressive

git push --force
git remote prune origin  
(4)本项目是存在云效codeup上,还需要到云效上手动清理下服务器缓存

git提交日志太多占内存,各种命令-git/shell/adb/linux,git,自动化,经验分享,python,appium

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

本地:

project (master ✔)du -d 1 -h
252K	./page
 16K	./shell
104K	./common
  0B	./log
  0B	./report
 13M	./.git
1.6M	./data
212K	./testcases
 15M	.

远程:
git提交日志太多占内存,各种命令-git/shell/adb/linux,git,自动化,经验分享,python,appium
清理完成✅



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

BFG下载

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

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

(3)用BFG清理文件

文件:large.apk文章来源地址https://www.toymoban.com/news/detail-780819.html

java -jar bfg.jar --delete-folders .git --delete-files large.apk  --no-blob-protection  project.git

Using repo : /Users/xxx/project.git

Found 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 --aggressive

git push --force

到了这里,关于【Git】Git瘦身,清理Git历史提交/.git大文件清理(云效、UI 自动化项目)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Git】—— 版本控制(忽略文件、查看修改内容,撤销未提交的修改、查看历史提交记录)

    目录 一、准备工作 二、忽略文件 三、查看修改内容 四、撤销未提交的修改 五、查看提交记录         前面学习了Git最基本的用法,包括安装Git、创建代码仓库以及提交本地代码。         下面将要学习版本控制。         先选择一个项目,给它创建一个代码仓库

    2024年02月05日
    浏览(40)
  • [GIT] GIT拆分仓库--不丢git提交历史记录

    如果你的代码仓库里有多个目录,你想把其中一个目录拆分出去变成一个独立的代码仓库。重要的一点是拆分的过程中要保留git提交历史记录。 进入根目录后,快速运行 ls 终端命令以确保列出所有子目录。 利用命令 git log 或 git log --onelist |wc  查看你的提交的信息和提交了多

    2024年02月09日
    浏览(70)
  • Git - 查看 commit 提交历史

    查看提交历史 在提交了若干更新,又或者克隆了某个项目之后,如何查看提交历史 官方栗子 运行下面的命令获取该项目: 运行 git log 命令 可以获取到的信息 不传入任何参数的默认情况下, git log 会按 时间先后顺序 列出所有的提交,最近的更新排在最上面 会列出每个提交

    2024年02月06日
    浏览(36)
  • Git(七).git 文件夹瘦身,GitLab 永久删除文件

    由于项目在打 Docker 包的时候,需要将前端的包也打到 Docker 容器中,所以将前端包和前端的 Dockerfile 文件都放在了后端的 Git 目录下。 久而久之,由于前端包的更新迭代,Git 上面会一直保留前端包的历史版本,所以整个后端的 .git 越来越大,截至目前已经有 2.44G 了。每次有

    2024年02月06日
    浏览(42)
  • git拉取历史提交的代码

    我们在写项目时,通常提交很多次代码,如果我们想拉取历史commit的某次代码,该如何做呢? 首先:将整个代码拉取到本地 接着,查看提交日志: 可以查看到黄色的commit的哈希值。 再创建新的分支并切换到新分支 最后,输入代码

    2024年03月23日
    浏览(36)
  • Git教程学习:04 查看提交历史

    在提交了若干更新,又或者克隆了某个项目之后,我们想回顾下提交历史,可使用 git log 命令。 以\\\"simplegit\\\"项目作为示例。运行下面的命令获取项目: 不传入任何参数的默认情况下, git log 会按时间先后顺序列出所有的提交,最近的更新排在最上面。这个命令会列出每个提交

    2024年01月20日
    浏览(35)
  • Git系列之修改历史提交信息

    比如我这里有三次提交 使用命令: 当使用 git rebase -i HEAD~3 时, git log 查看提交只有三条的话会报 fatal: invalid upstream \\\'HEAD~3\\\' 上说的这个错误。 注意 :这里显示的顺序其实是倒序。最新的提交在最下面,最老的提交在最上面。 这里把我们要修改的commit,这里是倒数第二次的提

    2023年04月09日
    浏览(35)
  • idea中回退git历史版本并删除历史提交记录

    本篇文章主要介绍git在idea中的回退历史版本,适用场景为代码提错分支、正常回退版本都可适用。 !!!回退前先检查一下本地分支是否和远程分支对应,否则会失败!!! 1,打开idea中git历史提交窗口 快捷键 alt + 9 (有改动则是自己改的快捷键) 2,选择要回退的版本拷贝版

    2024年02月11日
    浏览(44)
  • Git 使用 rebase 修改历史提交记录

    运行以下这条命令之后,它会打开一个vim编辑器,我们就可以修改上一次commit时输入的提交信息。 接下来你要是想修改描述信息的话,直接键入: i ,此时进入了输入模式。 可用键盘上下键转到描述所在的那一行,然后进行修改。 修改完成后,按下 Esc  键退出编辑模式,在

    2024年02月02日
    浏览(41)
  • Git(五):历史提交与远程仓库修改

    目录 4、查看提交历史 4.1 查看日志详细信息 4.2 查看某次提交信息 4.3 查看更改 5、撤销操作 5.1 取消暂存的文件 5.2 撤销对文件的修改 5.3 撤销远程记录 6 远程仓库的使用 6.1 查看远程仓库 6.2 添加远程仓库 6.3 从远程仓库中抓取与拉取 6.4 同步远程仓库 6.4.1 远程推送 6.4.2 同步

    2024年02月09日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包