【代码管理】Git删除仓库中的大文件压缩仓库大小

Git 仓库中有时会不小心加入了一些大文件,例如模型文件,视频文件
模型文件有可能以 .weights 结尾,或者 .onnx 结尾等等
视频文件有可能以 .avi 结尾,或者 .mp4 结尾
大文件如果一直在仓库中,仓库体积会非常大,下面我们提供一个脚本,专门用于清理 仓库中的文件使用。

仓库清理脚本

本脚本旨在从指定的 Git 仓库中移除不必要的 .weights 文件,优化仓库,并将更改推送到远程服务器。它提供了用户交互、详细日志输出及错误处理功能,以实现顺畅且可靠的清理过程。

使用前准备

在使用本脚本之前,请确保满足以下条件:

  • 您拥有一个包含待移除 .weights 文件的 Git 仓库。
  • 已在系统上安装 Git。

可选:为了提升性能,建议安装 git-filter-repo 工具(通常通过 pip install git-filter-repo 安装)。如果安装了 git-filter-repo,脚本将自动使用它替代 git filter-branch 命令进行更高效的历史清理。

使用方法

  1. 下载或复制脚本:将以下脚本保存为 clean_repo.sh 文件。

#!/bin/bash
# 清理指定仓库中无用的.weights文件
# 通过命令行参数接收仓库地址(文件夹路径)

# 获取仓库路径(优先使用命令行参数,否则使用当前目录)
if [ -n "$1" ]; then
    repository_path="$1"
else
    repository_path="."
fi

# 检查路径是否存在且为Git仓库
if [ ! -d "$repository_path" ] || ! (cd "$repository_path" && git rev-parse --is-inside-work-tree &>/dev/null); then
    echo "Error: The specified path '$repository_path' is not a valid Git repository."
    exit 1
fi

# 用户确认是否继续
read -p "Are you sure you want to proceed with cleaning the repository at '$repository_path'? [y/N] " confirm
confirm=${confirm,,}  # Convert to lowercase
if [[ $confirm != "y" ]]; then
    echo "Aborting the operation."
    exit 0
fi

cd "$repository_path" || exit 1  # 切换到指定仓库目录,若失败则退出脚本

# 清理垃圾文件并记录结果
echo "Cleaning up unnecessary .weights files..."
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch *.weights' --prune-empty --tag-name-filter cat -- --all || {
    echo "Error: Failed to clean up .weights files. Check the output above for details."
    exit 1
}

# 记录清理前后的仓库大小
before_size=$(du -sh .git | cut -f1)
echo "Repository size before cleanup: $before_size"

# 提交到远程仓库
echo "Pushing changes to remote repository (this may take some time)..."
git push origin --force --all || {
    echo "Error: Failed to push changes to the remote repository. Check your network connection and authentication settings."
    exit 1
}

# 回收垃圾并压缩本地仓库
echo "Performing garbage collection and compression..."
git for-each-ref --format='delete %(refname)' refs/original | git update-ref --stdin
git reflog expire --expire=now --all
git gc --prune=now

# 可选:进行更深度的压缩(视情况决定是否需要)
git gc --aggressive --prune=now

# 记录清理后的仓库大小
after_size=$(du -sh .git | cut -f1)
echo "Repository size after cleanup: $after_size"

echo "Cleanup completed successfully."

  1. 赋予执行权限:在终端中,使用 chmod +x clean_repo.sh 命令为脚本赋予执行权限。

  2. 执行脚本

    • 指定仓库路径:运行 ./clean_repo.sh /path/to/repository,其中 /path/to/repository 是您要清理的仓库路径。
    • 使用当前目录:如果您想清理当前目录下的仓库,只需运行 ./clean_repo.sh

    脚本将引导您完成确认、清理、推送、压缩等步骤,并在过程中输出详细日志。

注意事项

  • 谨慎操作:清理操作会修改仓库历史,可能导致分支合并复杂性增加。请确保所有团队成员知晓此次清理,并在执行前备份重要数据。
  • 权限要求:执行清理和推送操作需具有相应的 Git 权限。确保您有权修改所清理仓库的历史记录及向远程服务器推送更改。
  • 性能影响:对于大型仓库,清理和压缩过程可能耗时较长。请耐心等待,并确保网络连接稳定。
  • 清理效果:清理后,仓库在本地和远程的大小可能不会立即更新。请等待一段时间后刷新查看,或联系服务提供商确认是否需要手动触发更新。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/576194.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Type-C接口取电IC6500:优势与应用场景的深度解析

Type-C接口PD芯片取电IC的优势 随着科技的不断进步和移动设备在日常生活中的广泛应用,充电技术的革新变得愈发重要。Type-C接口PD芯片取电IC作为现代充电技术的关键组件,其优势日益凸显,为移动设备充电带来了革命性的改变。本文将深入探讨Ty…

(三)登录和注册(handle_auto.go)

登录和注册(handle_auto.go) 文章目录 登录和注册(handle_auto.go)一、所需要的结构体信息二、注册三、登录四、退出 一、所需要的结构体信息 type UserAuth struct{}type LoginReq struct {Username string json:"username" binding:"required"Password …

【汇编语言】直接定址表

【汇编语言】直接定址表 文章目录 【汇编语言】直接定址表前言一、移位指令移位指令过程逻辑移位指令shl 和 shr 二、操作显存数据显示的原理显示缓冲区的结构显示信息的一种“直接”方式 三、描述内存单元的标号关于标号去了冒号的数据标号数据标号同时描述内存地址和单元长度…

前端JS必用工具【js-tool-big-box】,防抖和节流的方法调用学习

这一小节,我们针对前端工具包(npm)js-tool-big-box的使用做一些讲解,主要是防抖和节流方面的。 目录 前言 1 安装和引入 2 防抖的调用学习 3 节流的调用学习 4 使用方法总结 前言 在前端项目中,经常涉及到防抖…

CNAS软件测评报告收费标准

随着信息技术的快速发展,软件测评在保障软件质量、提升用户体验等方面扮演着越来越重要的角色。CNAS(中国合格评定国家认可委员会)作为国内权威的认可机构,其软件测评报告收费标准受到了广泛关注。本文旨在解析CNAS软件测评报告的…

[华为OD]幼儿园两个班的小朋友 100

题目: 幼儿园两个班的小朋友在排队时混在了一起,每位小朋友都知道自己是否与前面一位小朋友 是否同班,请你帮忙把同班的小朋友找出来。 小朋友的编号为整数,与前一位小朋友同班用 Y 表示,不同班用 N 表示。 输入描…

索引【MySQL】

文章目录 什么是索引测试表 磁盘和 MySQL 的交互了解磁盘MySQL 的工作原理Buffer Pool 理解索引引入Page 的结构页内目录(Page Directory)多页情况B 树和 B树聚簇索引和非聚簇索引 主键索引创建 唯一索引主要特点与主键索引的区别使用场景创建 联合索引工…

思维+数学期望,CF 1525E Assimilation IV

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 Problem - 1525E - Codeforces 二、解题报告 1、思路分析 看数据量盲猜O(…

树的层序遍历(详解)

下面以一道力扣题为例: 代码和解释如下: /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(…

零基础HTML教程(31)--HTML5多媒体

文章目录 1. 背景2. audio音频3. video视频4. audio与video常用属性5. 小结 1. 背景 在H5之前,我们要在网页上播放音频、视频,需要借助第三方插件。 这些插件里面最火的就是Flash了,使用它有几个问题: 首先要单独安装Flash&…

华为Pura 70系列,一种关于世界之美的可能

1874年,莫奈创作了《印象日出》的油画,在艺术界掀起了一场革命。当时的主流艺术,是追求细节写实,追求场面宏大的学院派。他们称莫奈等人是“印象派”,认为莫奈的画追求光影表达,追求描绘抽象的意境&#xf…

echarts地图叠加百度地图底板实现数据可视化

这里写自定义目录标题 echarts地图叠加百度地图实现数据可视化echarts地图叠加百度地图实现数据可视化 实现数据可视化时,个别情况下需要在地图上实现数据的可视化,echarts加载geojson数据可以实现以地图形式展示数据,例如分层设色或者鼠标hover展示指标值,但如果要将echa…

【Redis 开发】一人一单,超卖问题(悲观锁,乐观锁,分布式锁)

锁 悲观锁乐观锁第一种:版本号法第二种:CAS法实现乐观锁 悲观锁与乐观锁的比较 一人一单分布式锁Redis实现分布式锁 悲观锁 认为线程问题一定会发生,因此在操作数据库之前先获取锁,确保线程串行执行,例如Synchronized…

好的猫咪主食冻干到底该咋选?品控稳定的主食冻干推荐

315中国之声报道的河北省邢台市南和区某宠粮代工厂的“行业潜规则”,给各位铲屎官拉响了警钟。配料表上写的鸡肉含量为52%,新鲜鸡小胸含量为20%,所谓的鲜鸡肉其实就是鸡肉粉。本来养宠物是为了让自己身心愉悦,但这样的行业乱象弄得…

prompt提示词:AI英语词典优化版Pro,让AI教你学英语,通过AI实现一个网易有道英语词典

目录 一、前言二、效果对比三、优化《AI英语词典》提示词四、其他获奖作品链接 一、前言 不可思议!我的AI有道英语字典助手竟然与百度千帆AI应用创意挑战赛K12教育主题赛榜首作品差之毫厘 ,真的是高手都是惺惺相惜的,哈哈,自恋一…

发票管理设计方案

1、背景介绍 在供应链金融业务场景下,供应商可以依赖与大型企业的合同、发票信息,到金融机构进行融资。本文探讨发票管理的设计方案。 2、需求分析 如上图所示,发票管理主要分为发票信息的管理以及发票可用余额管理2个部分。 名词解释&…

Docker-概念及配置(超详细)

docker 第一章 1、什么是docker 答:docker是一种容器引擎,通过docker可以将软件安装并且配置好以后,做成一个镜像文件。通过这个镜像文件可以快速的安装、配置软件环境 2、3个概念 【docker镜像】:将软件环境安装配置好以后产生…

【QA】Git的底层原理

前言 本文通过一个简单的示例,来理解Git的底层原理。 示例 1、新建本地仓库并上传第一个文件 相关步骤: 新建仓库及创建文件查看文件状态将文件添加到暂存区将文件提交到本地仓库 HMTeenLAPTOP-46U4TV6K MINGW64 /d/GSF_Data/Github/Java/Git/git-…

一张图带你理解 绝对路径 和 相对路径

绝对路径和相对路径是用于定位文件或目录位置的两种不同方式。 1、绝对路径: 绝对路径是从文件系统的根目录开始的完整路径,可以唯一地标识文件或目录的位置。 绝对路径是以根目录开始的 在Unix/Linux系统中,绝对路径是类似于/home/user/do…

2024 OceanBase 开发者大会:OceanBase 4.3正式发布,打造近PB级实时分析数据库

4月20日,2024 OceanBase开发者大会盛大召开,吸引了50余位业界知名的数据库专家和爱好者,以及来自全国各地的近600名开发者齐聚一堂。他们围绕一体化、多模、TP与AP融合等前沿技术趋势展开深入讨论,分享场景探索的经验和最佳实践&a…
最新文章