遇到 Git 提示大文件无法上传确实让人头疼

遇到 Git 提示大文件无法上传确实让人头疼,但别担心,我们可以一步步来解决。为了让你更清晰地了解整个流程,我先用一个表格来概括主要步骤:

步骤核心操作关键命令/工具示例 (用于删除历史中的大文件)
1. 定位大文件使用 Git 命令或工具找出仓库中的大文件git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -5 | awk '{print$1}')"
2. 删除大文件所有历史记录中彻底删除找到的大文件git filter-repo --path <文件路径> --invert-paths
BFG 工具
3. 清理与推送执行垃圾回收并强制推送到远程仓库git gc --aggressive --prune=all , git push --force
4. 预防再次发生使用 .gitignore 和 Git LFS 避免类似问题git lfs track "*.psd"

接下来,我们详细看看每一步的具体操作。

📍 第一步:定位问题大文件

首先需要找出到底是哪个(些)文件体积过大。Gitee 的错误信息有时会直接给出文件名,如果没有,你可以通过以下命令来查找:

  1. 查看体积最大的几个文件:这个命令会列出仓库中体积最大的5个文件(你可以修改 tail -5 中的数字来查看更多):
    git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -5 | awk '{print$1}')"
    
  2. 使用图形化工具(可选):如果你更喜欢图形界面,一些 Git 客户端(如 GitKrakenSourceTree)或者 Git LFS 的相关命令(git lfs ls-files)也能帮助你直观地查看大文件。

🗑️ 第二步:从历史中彻底删除大文件

找到大文件后,就需要将它从 Git 的历史记录中彻底移除请注意,以下操作会重写 Git 历史,这意味着会改变提交的哈希值。如果仓库是多人协作,必须提前通知所有协作者,让他们在你强制推送后重新克隆仓库

这里推荐使用 git filter-repo,它是一个更现代、更高效且更安全的工具,可以替代老旧的 git filter-branch

  1. 安装 git-filter-repo

    • Ubuntu/Debian: sudo apt install git-filter-repo
    • macOS: brew install git-filter-repo
    • 也可以通过 Pip 安装: pip install git-filter-repo
  2. 使用 git-filter-repo 删除文件(以删除 src/assets/大文件/mtbg.gif 为例):

    # 确保你在仓库的根目录下
    # --path 指定要删除的文件路径
    # --invert-paths 意味着排除这些路径,即删除它们
    git filter-repo --path src/assets/大文件/mtbg.gif --invert-paths --force
    

    这条命令会遍历所有提交,并将指定的文件从历史中彻底剔除。

  3. 替代方案:使用 BFG Repo-Cleaner
    BFG 是一个专为清理 Git 仓库中大文件而设计的工具,比 filter-branch 更快速简单。

    # 安装 BFG 需要 Java 环境
    # 下载 BFG jar 包(例如 wget 方式)
    wget http://repo1.maven.org/maven2/com/madgag/bfg/1.14.0/bfg-1.14.0.jar
    # 运行 BFG 删除特定文件
    java -jar bfg-1.14.0.jar --delete-files 'mtbg.gif'
    

🧹 第三步:清理本地仓库并强制推送

彻底删除大文件后,本地仓库还需要进行一些清理操作,然后再推送到远程。

  1. 执行垃圾回收 (GC):这个命令会清理不必要的文件并优化本地仓库。

    git gc --aggressive --prune=all
    

    之后你可以用 git count-objects -vH 查看优化后的仓库大小,应该会显著减小。

  2. 强制推送到远程仓库:因为重写了历史,必须使用 --force 选项来推送。

    # 强制推送所有分支
    git push origin --force --all
    # 强制推送所有标签
    git push origin --force --tags
    

    再次强调:强制推送前务必确保团队其他成员知晓!

🛡️ 第四步:预防问题再次发生

为了避免以后再次遇到同样的问题,最好采取一些预防措施:

  1. 善用 .gitignore 文件:在仓库根目录创建或编辑 .gitignore 文件,忽略那些不需要版本控制的文件,如编译产物、依赖包、日志文件、系统文件等。例如:

    # 忽略 .zip 压缩包
    *.zip
    # 忽略 node_modules 目录
    node_modules/
    # 忽略 .log 日志文件
    *.log
    

    记得将 .gitignore 文件也提交到 Git 中。

  2. 使用 Git LFS 管理必需的大文件:如果你的项目中确实需要版本控制一些大型文件(如图片、视频、模型文件等),Git Large File Storage (LFS) 是一个更好的选择。它会将大文件存储在单独的地方,而在 Git 仓库中只保留指针,从而避免仓库体积过快增长。

    # 安装 Git LFS
    git lfs install
    # 跟踪特定类型的文件(例如跟踪所有 .psd 文件)
    git lfs track "*.psd"
    # 确保 .gitattributes 文件被提交(此文件保存 LFS 跟踪规则)
    git add .gitattributes
    git commit -m "开始使用 Git LFS 跟踪 .psd 文件"
    

⚠️ 操作前的重要提醒

在进行上述操作,尤其是重写历史(git filter-repoBFG)和强制推送(git push --force)前,请务必注意:

  • 备份你的仓库:最简单的方法就是直接复制整个仓库文件夹。
  • 通知协作者:重写历史后,其他所有开发者必须使用 git clone 重新克隆仓库,或者使用 git fetch origin && git reset --hard origin/master 等命令将其本地分支重置到新的历史记录上。否则,他们的提交极有可能引起混乱。

💎 总结

处理 Git 中的大文件问题,关键在于彻底将其从历史记录中移除,而不仅仅是删除最新版本的文件。git filter-repoBFG 工具是完成这项工作的利器。之后,通过配置 .gitignoreGit LFS,可以有效地预防此类问题再次发生。

希望这些详细的步骤能帮助你顺利解决问题。如果还有其他疑问,欢迎随时提出。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器人控制器开发(传感器层——奥比大白相机适配)

编译OrbbecSDK_ROS2的代码 执行命令 colcon buildros2 launch orbbec_camera dabai.launch.py问题1&#xff1a; 运行时报错&#xff1a; [component_container-1] [ERROR] [1757153916.450795107] [camera.camera_container]: Failed to load library: Could not load library…

C语言(长期更新)第15讲 指针详解(五):习题实战

C语言&#xff08;长期更新&#xff09;第15讲 指针详解&#xff08;五&#xff09;&#xff1a;习题实战 跟着潼心走&#xff0c;轻松拿捏C语言&#xff0c;困惑通通走&#xff0c;一去不回头~欢迎开始今天的学习内容&#xff0c;你的支持就是博主最大的动力。博主主页&#…

数据仓库概要

什么是数据仓库&#xff1f; 数据仓库是一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合&#xff0c;用于支持管理决策。 核心特征 1. 面向主题 数据仓库围绕核心业务主题&#xff08;如客户、产品、销售、财务&#xff09;来组织数据&#xff0c;而不是围绕具体的…

python库 Py2exe 的详细使用(将 Python 脚本变为Windows独立软件包)

更多内容请见: python3案例和总结-专栏介绍和目录 文章目录 一、Py2exe 概述 1.1 Py2exe介绍 1.2 Py2exe安装 1.3 替代工具推荐 二、基础使用 2.1 编写打包脚本 2.2 执行打包命令 2.3 完整案例 2.4 配置选项详解 2.5 构建和分发 三、高级配置 3.1 包含隐藏导入 3.2 处理特殊包…

CuTe C++ 简介02,gemm_device cuda kernel 的实现

《CuTe C 简介01&#xff0c;从示例开始 》 中&#xff0c;最后看到了 计算 gemm 的cuda kernel&#xff0c;使用 NVIDIA CUTLASS 的 CUTe (CUDA Tile) 库实现的高性能 GEMM (通用矩阵乘法) CUDA kernel。接下来解释一下这个内核的各个部分。文末再贴一遍代码&#xff0c;方便查…

万代《宝可梦》主题新品扭蛋公开!史上最大尺寸

使用jQuery的常用方法与返回值分析 jQuery是一个轻量级的JavaScript库&#xff0c;旨在简化HTML文档遍历和操作、事件处理以及动画效果的创建。本文将介绍一些常用的jQuery方法及其返回值&#xff0c;帮助开发者更好地理解和运用这一强大的库。 1. 选择器方法 jQuery提供了多种…

【FastDDS】Layer Transport ( 05-Shared Memory Transport)

6.4 共享内存传输 共享内存&#xff08;SHM&#xff09;传输依靠主机操作系统提供的共享内存机制&#xff0c;实现了在同一处理单元/机器上运行的实体之间的快速通信。注意 Fast DDS 利用域参与者&#xff08;DomainParticipant&#xff09;的 GuidPrefix_t 来识别在同一主机上…

记 2025/9/6

人工智能常见的模型按照处理问题分为6大类&#xff1a;处理权重问题的权重模型、处理状态问题的状态模型、处理序列问题的问题模型、处理表示问题的表示模型、处理相似度的相似模型、处理分类问题的分类模型。权重是计算特定状态下事物的重要性。状态问题是刻画权重动态变化的过…

开启Python之路,第一节学习大纲-从入门到进阶

前端开启Python之路&#xff0c;前端有没有必要卷后端技术&#xff0c;欢迎各位大神批评指正 第一阶段&#xff1a;基础入门 (打好根基) 目标&#xff1a; 理解编程基本概念&#xff0c;掌握 Python 核心语法&#xff0c;能编写简单的脚本程序。 1、环境搭建与开发工具 安装 Py…

webshell及冰蝎双击无法打开?

什么是webshell&#xff1f; web:万维网 shell&#xff1a;是指一种应用程序&#xff0c;为用户和系统之间建立连接&#xff0c;通过这个界面访问操作系统内核的服务 webshell:是以asp、aspx、php、jsp或者cgi等网页文件形式存在的一种命令执行环境&#xff0c;也可以将其称做…

【星闪】Hi2821 | PWM脉宽调制模块 + 呼吸灯例程

1. 简介PWM&#xff08;Pulse Width Modulation&#xff09;&#xff0c;全称脉宽调制&#xff0c;通过对一系列脉冲的宽度进行调制&#xff0c;等效出所需波形。即对模拟信号电平进行数字编码&#xff0c;通过调节频率、占空比的变化来调节信号的变化。一个 PWM 周期内由一段高…

51单片机---硬件学习(电子琴、主从应答模式、modbus模型、DS18B20传感器显示温度)

一、串行通信与并行通信1、串行通信定义&#xff1a;数据一位一位地按顺序通过单条传输线进行传输的通信方式。优点&#xff1a;传输线少&#xff0c;成本低&#xff0c;适合长距离传输缺点&#xff1a;传输速度相对较慢2、并行通信定义&#xff1a;数据的各位同时通过多条并行…

SpringBoot后端开发常用工具详细介绍——SpringSecurity认证用户保证安全

简单的开始 创建SpringBoot项目 首先创建一个简单的springboot项目&#xff0c;假设端口为8888&#xff0c;添加controller控制层&#xff0c;并在其中添加TestController控制类&#xff0c;那么启动springboot项目之后&#xff0c;访localhost:8888/api/message页面会显示my…

别再手工缝合API了!开源LLMOps神器LMForge,让你像搭积木一样玩转AI智能体!

你是否受够了这些&#xff1f; 刚调通OpenAI的API&#xff0c;老板说“咱们试试国产模型降本增效”&#xff0c;你看着满屏的if-else只想说“我晕”。想给AI加上“查天气”、“执行代码”的能力&#xff0c;却发现Function Calling的代码复杂得让人头皮发麻。本地的Agentdemo惊…

window使用ffmep工具,加自定义脚本执行视频转码成h264(运营人员使用)

技术文章大纲&#xff1a;ffmep配合脚本使用1. 需要提供脚本给视频转码的给运营,给运营上传视频使用安装ffmep windows版本(目前我使用的就是windows)将脚本里面的执行路径修改成自己的电脑安装ffmep/bin/ffmep.exe路径处理好之后就点击执行2.环境准备ffmep windows版解压到一个…

Leetcode 240. 搜索二维矩阵 II 矩阵 / 二分

原题链接&#xff1a; Leetcode 240. 搜索二维矩阵 II 解法一&#xff1a;排除法 参考 【图解】排除法&#xff0c;一图秒懂&#xff01;&#xff08;Python/Java/C/C/Go/JS/Rust&#xff09; 从右上角&#xff1a; class Solution { public:bool searchMatrix(vector<vec…

OCR 证件识别:驱动澳门酒店自助入住智能化

澳门酒店作为国际旅游窗口&#xff0c;每日接待持多元证件的旅客&#xff0c;OCR 证件识别技术的应用&#xff0c;让自助入住终端实现 “一证通办”&#xff0c;大幅提升服务效率。​旅客在自助终端办理入住时&#xff0c;只需将护照、港澳通行证、回乡证、电子身份证等证件贴近…

深入解析汇编语言的奥秘

汇编语言简介汇编语言&#xff08;Assembly Language&#xff09;是一种低级编程语言&#xff0c;直接对应计算机的机器指令集。它通过助记符&#xff08;如 MOV、ADD&#xff09;代替二进制操作码&#xff0c;更接近硬件架构&#xff0c;常用于性能优化、嵌入式开发或逆向工程…

Nextcloud 实战:打造属于你的私有云与在线协作平台

随着数据安全与隐私保护意识的提升&#xff0c;越来越多的个人和组织选择自建云平台来替代公有云。Nextcloud 作为一款开源的文件同步与协作套件&#xff0c;不仅能实现类似网盘的文件存储与分享&#xff0c;还提供日历、联系人、即时通讯、在线文档编辑等协作功能&#xff0c;…

实践指南:利用衡石AI Data Agent实现自然语言驱动的指标开发与归因

在数字化转型的深水区&#xff0c;企业数据团队常面临两难困境&#xff1a;业务部门需要敏捷响应的指标分析&#xff0c;但传统BI工具依赖技术团队编写SQL&#xff0c;导致需求交付周期长达数周&#xff1b;而直接暴露底层数据又存在安全与合规风险。衡石科技推出的AI Data Age…