Git 仓库体积过大,缩减记录

您所在的位置:网站首页 仓库越库 Git 仓库体积过大,缩减记录

Git 仓库体积过大,缩减记录

2024-07-12 19:11:15| 来源: 网络整理| 查看: 265

一、前言

写这篇博客主要是因为存储博客图片和一些文件占用GitHub仓库过大,导致仓库体积变大,所以找了一些方案,记录一下

上图可以看到原仓库已经很大了,所以必须要清除一些仓库中没用的大文件了,每次下载仓库那个时间简直是太长了,github拉取时间太久,受不了了。

二、具体操作

首先,git仓库中删除历史大文件分为以下步骤:

查找大文件id→根据id查找大文件所在的路径→删除文件→删除文件的历史记录→提交→清除本地缓存 (我按照我的理解总结的,不知道是不是对的,如果有错误的话,麻烦大家在下面评论区纠正一下,谢谢!)

具体的命令如下:【ps:后面有更简单的代码,如果想要直接用的话可以直接看本文后面】

1. 显示10个最大的文件id列表代码语言:javascript复制$ git verify-pack -v .git/objects/pack/pack-*.idx | sort -k 3 -g | tail -20

结果类似下图(从左往右依次是文件ID、文件类型、文件字节数、size-in-packfil、offset-in-packfile),列表越往下,文件越大

其实,往专业点来说,文件ID其实是SHA1,不过不知道这是啥也没关系。

2. 根据文件id查询文件路径代码语言:javascript复制$ git rev-list --objects --all | grep 【大文件id】

【大文件id】填上面步骤1中的id,例如上图最后一个id为:273c3734ffbe8df3092e8409f41f895b190612ee

则命令为:

代码语言:javascript复制$ git rev-list --objects --all | grep 273c3734ffbe8df3092e8409f41f895b190612ee结果如下:

复制image/blog_images090816290568_01.png文件地址留下来备用

3. 移除文件代码语言:javascript复制$ git log --pretty=oneline --branches -- 【your_file】

【your_file】那里填上一步得到的路径,类似于下面这样:

代码语言:javascript复制$ git log --pretty=oneline --branches -- image/blog_images090816290568_01.png

上图显示了提交记录,然后继续下一步。

4. 删除文件的历史记录代码语言:javascript复制$ git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch --ignore-unmatch 【your_file】' --prune-empty --tag-name-filter cat -- --all

【your_file】那里还是填第2步得到的路径,类似于下面这样:

代码语言:javascript复制$ git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch --ignore-unmatch image/blog_images090816290568_01.png' --prune-empty --tag-name-filter cat -- --all

接下来就要稍等一下了,如下图,提交的记录越多,需要等待的时间越长。

3、4步需要注意的地方

【注意】如果文件名有空格,则需要用双引号引起来,例如:

代码语言:javascript复制# 第三步 $ git log --pretty=oneline --branches -- "a a/b b/c c/img.png" # 第四步 $ git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch --ignore-unmatch "a a/b b/c c/img.png"' --prune-empty --tag-name-filter cat -- --all5. 提交代码语言:javascript复制$ git push --force --all

【注意】这一步需要输入GitHub的账号和密码

另外,如果出现提示remote: GitLab: You are not allowed to force push code to a protected branch on this project.

需要在GitHub里面取消分支protected.

6. 清除本地缓存代码语言:javascript复制$ rm -Rf .git/refs/original $ rm -Rf .git/logs/ $ git gc $ git prune做完这一步查看仓库大小Gitee清理仓库体积

Gitee的官方文档仓库体积过大,如何减小?

首先,查看存储库中的大文件:

1. 查看存储库中的大文件代码语言:javascript复制$ git rev-list --objects --all | grep -E `git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -10 | awk '{print$1}' | sed ':a;N;$!ba;s/\n/|/g'` # 或 $ git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -15 | awk '{print$1}')"2. 改写历史,去除大文件

注意:命令中的 path/to/large/files 是大文件所在的路径,千万不要弄错!

代码语言:javascript复制$ git filter-branch --tree-filter 'rm -f path/to/large/files' --tag-name-filter cat -- --all $ git push origin --tags --force $ git push origin --all --force

如果在 git filter-branch 操作过程中遇到如下提示,需要在 git filter-branch 后面加上参数 -f

代码语言:javascript复制Cannot create a new backup. A previous backup already exists in refs/original/ Force overwriting the backup with -f

并告知所有组员,push 代码前需要 pull rebase,而不是 merge,否则会从该组员的本地仓库再次引入到远程库中,导致仓库在此被 Gitee 系统屏蔽。

3. 执行存储库GC

按照下图操作即可。

然后,去仓库数据统计刷新一下仓库大小即可,大功告成!



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭