遇到 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
英文地址,請注明出處:http://en.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…