【Git】Git LFS的使用

一、簡介

Git LFS(Git Large File Storage)是由 GitHub 開發的一款 Git 擴展工具,旨在幫助開發者更高效地管理倉庫中的大文件。傳統 Git 會將文件的每個版本完整存儲在倉庫歷史中,導致大文件(如音頻、視頻、數據集、二進制文件等)快速膨脹倉庫體積,影響克隆和推送效率。Git LFS 通過以下機制解決這一問題:

核心原理

  1. 指針替換:在提交時,將大文件替換為輕量級的文本指針(Pointer File),僅幾 KB 大小,包含原文件的元信息(如哈希值、存儲路徑)。
  2. 遠程存儲:大文件實際內容被存儲在 Git LFS 服務器(如 GitHub、GitLab 提供的服務,或自建服務器),與代碼倉庫分離。
  3. 按需下載:克隆或切換分支時,Git LFS 會根據指針文件從遠程服務器下載當前需要的大文件版本,而非全部歷史版本。

工作流程

  1. 安裝:先安裝 Git LFS 客戶端(官網下載),并在倉庫中初始化:

    bash

    git lfs install
    
  2. 跟蹤文件:指定需要使用 LFS 管理的文件類型或路徑(支持通配符):

    bash

    git lfs track "*.mp4"  # 跟蹤所有 MP4 文件
    git lfs track "data/*" # 跟蹤 data 目錄下的所有文件
    
    此操作會生成?.gitattributes?文件并自動提交,記錄跟蹤規則。
  3. 正常提交:添加、提交和推送文件時,Git LFS 會自動處理大文件:

    bash

    git add video.mp4
    git commit -m "添加視頻文件"
    git push origin main
    
    推送時,大文件會上傳至 LFS 服務器,代碼倉庫僅包含指針。
  4. 克隆倉庫:使用?git clone?時,LFS 文件會自動下載:

    bash

    git clone https://example.com/repo.git
    
    若只需代碼而不下載大文件,可使用:

    bash

    git lfs clone --skip-smudge https://example.com/repo.git
    
    后續按需下載指定文件:

    bash

    git lfs pull --include="video.mp4"
    

主要優勢

  • 倉庫體積顯著減小:避免大文件占用過多空間,提升克隆速度。
  • 版本控制更高效:僅需管理輕量級指針,歷史記錄更清晰。
  • 協作友好:團隊成員可選擇性下載需要的大文件,節省帶寬。
  • 兼容性強:與現有 Git 工作流程無縫集成,無需改變使用習慣。

注意事項

  • 存儲成本:部分托管平臺(如 GitHub)對 LFS 存儲和帶寬有限額,超出需付費。
  • 依賴外部服務:需確保 LFS 服務器可用,否則可能影響文件訪問。
  • 歷史清理復雜:若誤提交大文件到普通 Git 歷史,需使用?git filter-repo?等工具清理。

Git LFS 適合需要在 Git 倉庫中管理大文件的場景,尤其在音視頻制作、機器學習(數據集)、游戲開發(資源文件)等領域應用廣泛。

二、Git LFS的使用過程

1.創建文件夾,使用git init?

# 在當前目錄初始化一個新的 Git 倉庫 git init

2.在該倉庫下安裝Git LFS

15155@MM MINGW64 /e/Git_Projects/MDK (main)
$ git lfs install
Updated Git hooks.
Git LFS initialized.

驗證

$ git lfs version
git-lfs/3.5.1 (GitHub; windows amd64; go 1.21.7; git e237bb3a)

3.配置跟蹤規則

在倉庫中指定哪些文件需要使用 LFS 管理,支持通配符(如?*.mp4data/*)。

方式一:命令行直接跟蹤

bash

git lfs track "*.mp4"     # 跟蹤所有 MP4 文件
git lfs track "data/*"    # 跟蹤 data 目錄下的所有文件
git lfs track "model.h5"  # 跟蹤特定文件

執行后,Git LFS 會自動創建或更新?.gitattributes?文件(需提交該文件)。

$ git lfs track "*.zip"
Tracking "*.zip"

產生文件

?方式二:手動編輯?.gitattributes

直接在倉庫根目錄創建或編輯?.gitattributes?文件,添加類似以下內容:

plaintext

*.mp4 filter=lfs diff=lfs merge=lfs -text
data/* filter=lfs diff=lfs merge=lfs -text

4.提交Git LFS配置文件,目標大文件和推送到運程的目標大文件

添加、提交和推送文件的操作與普通 Git 流程一致,但大文件會自動上傳到 LFS 服務器:

bash

git add .gitattributes    # 提交跟蹤規則
git add video.mp4        # 添加大文件(實際只提交指針)
git commit -m "添加視頻文件"
git push origin main     # 推送時,大文件會上傳到 LFS 服務器

(1)提交配置

$ git add .gitattributes

(2)查看大文件

$ ls -al
total 813758
drwxr-xr-x 1 28970 197609         0 Jul 27 10:24 ./
drwxr-xr-x 1 28970 197609         0 Jul 27 09:55 ../
drwxr-xr-x 1 28970 197609         0 Jul 27 10:27 .git/
-rw-r--r-- 1 28970 197609        43 Jul 27 10:24 .gitattributes
-rw-r--r-- 1 28970 197609 833276817 Jul 16 22:16 MDK528.zip
-rw-r--r-- 1 28970 197609        39 Jul 27 09:45 README.md

(3)暫存目標大文件

$ git add MDK528.zip

(4)提交到本地

$ git commit -m "Firstly,commit a big MDK_Setup_package."
[main 39e1935] Firstly,commit a big MDK_Setup_package.2 files changed, 4 insertions(+)create mode 100644 .gitattributescreate mode 100644 MDK528.zip

(5)推送至遠程

$ git push origin main
Uploading LFS objects: 100% (1/1), 833 MB | 3.6 MB/s, done.
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 20 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (4/4), 498 bytes | 249.00 KiB/s, done.
Total 4 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)
To github.com:Molesidy/MDK.git58bc491..39e1935  main -> main

5.成功提交并上傳大文件

注:普通git不能傳輸超過100MB的文件,而git lfs在github上最大支持2GB;

普通的免費 GitHub 倉庫建議最大存放 1GB 的文件:

GitHub 雖未對免費倉庫設置嚴格的硬性容量上限,但建議將倉庫大小保持在 1GB 以內,理想情況是小于 5GB。若超過該大小,可能會收到 GitHub 支持團隊要求減小倉庫大小的郵件。此外,免費賬戶單個文件不能超過 100MB,若文件大于 50MB 會收到警告,若通過瀏覽器上傳文件,則不得大于 25MB。

三、補充說明1

Git LFS 的文件大小限制取決于具體的存儲提供商客戶端配置,而非 Git LFS 本身。以下是常見場景的限制說明:

1. 不同平臺的文件大小限制

平臺免費版限制付費版限制
GitHub單個文件 ≤ 2GB單個文件 ≤ 5GB(需聯系支持)
GitLab單個文件 ≤ 10GB(取決于實例配置)企業版可提升限制
Bitbucket單個文件 ≤ 2GB單個文件 ≤ 5GB(需聯系支持)
AWS CodeCommit無明確限制(受 S3 存儲桶限制)無明確限制
自建服務器取決于服務器配置(如 Nginx/Apache 限制)自定義配置
  • 注意:即使平臺支持大文件,上傳速度也可能受網絡和服務器性能影響。

2. 客戶端配置限制

Git LFS 客戶端默認沒有嚴格的文件大小上限,但可能受以下因素影響:

  • HTTP 請求大小限制:如果使用 HTTP 協議傳輸,服務器(如 Nginx、Apache)可能限制最大請求體大小。例如:

    bash

    # Nginx 配置示例(需修改 nginx.conf)
    client_max_body_size 10G;
    
  • 內存和磁盤空間:上傳 / 下載大文件時,客戶端需要足夠的臨時空間緩存數據。

3. 突破限制的方法

  • 使用專業存儲服務:對于超大文件(如數十 GB),可考慮將文件存儲在云存儲(如 S3、Google Cloud Storage),僅在 Git 中記錄下載鏈接。
  • 分塊處理:將大文件分割為多個小文件(如使用?split?命令),分別管理。
  • 聯系平臺支持:企業版用戶可聯系 GitHub/GitLab 等平臺提升限制。

4. 最佳實踐

  • 避免超大型文件:盡量將單個文件控制在 1GB 以內,過大的文件會顯著降低協作效率。
  • 使用?.gitattributes?嚴格過濾:僅對必要的大文件使用 LFS,避免意外提交不需要的大文件。
  • 定期清理歷史:使用?git lfs prune?清理不再需要的本地 LFS 文件。

總結

Git LFS 的實際文件大小限制因平臺而異,免費版通常支持 2GB 以內,付費版或自建服務器可擴展到更大。在使用前,建議查看對應平臺的文檔或聯系技術支持確認具體限制。

四、補充說明2

對于免費 GitHub 用戶,單個倉庫內的 Git LFS 文件最大支持 2GB,這一結論是正確的。以下是具體細節和限制說明:

1. 單個文件大小限制:2GB(免費版明確支持)

根據 GitHub 官方文檔,免費用戶的 Git LFS 文件大小限制為:

  • 單個文件上限:2GB(付費版如 GitHub Team 為 4GB,GitHub Enterprise Cloud 為 5GB)。
  • 超出處理:若上傳超過 2GB 的文件,Git LFS 會直接拒絕并報錯。

例如,用戶上傳一個 2.1GB 的視頻文件時,會收到類似以下的錯誤提示:

bash

error: The file "large_video.mp4" is 2.1 GB; this exceeds GitHub's file size limit of 2.0 GB for Git LFS files.

2. 倉庫總存儲量限制:所有倉庫共享 1GB

盡管單個文件支持 2GB,但免費用戶的所有倉庫的 LFS 文件總存儲量被限制為 1GB。例如:

  • 若在多個倉庫中分別上傳 2 個 1GB 的 LFS 文件,總存儲量將達到 2GB,超出免費配額,導致后續上傳失敗。
  • 需通過 GitHub 賬戶設置中的Billing and plans頁面查看實時用量。

3. 帶寬配額:每月 1GB(所有倉庫共享)

免費用戶的 LFS 文件下載和上傳帶寬每月總計 1GB。例如:

  • 若一個 2GB 的 LFS 文件被下載 5 次,總帶寬消耗為 10GB(遠超免費配額),此時文件將無法繼續下載,需升級付費計劃。

4. 常見誤區與注意事項

(1)倉庫總大小與 LFS 存儲的區別

  • 倉庫總大小:GitHub 建議免費倉庫總大小控制在 1GB 以內(含普通文件和 LFS 指針文件),但這是軟性建議,非硬性限制。
  • LFS 存儲量:僅計算實際存儲在 GitHub LFS 服務器上的大文件內容,不包含倉庫中的普通文件和指針文件。

(2)LFS 指針文件不占用存儲配額

Git LFS 在倉庫中存儲的是輕量級指針文件(約 1KB),這些文件不計入 1GB 的 LFS 存儲配額。例如:

  • 即使倉庫中有 1000 個 LFS 指針文件,它們的總大小仍可忽略不計。

(3)歷史文件清理的重要性

  • 未引用的 LFS 文件:即使文件被刪除或從倉庫歷史中移除,其內容仍可能保留在 LFS 存儲中,繼續占用配額。
  • 清理方法:使用?git lfs prune?命令清理本地未引用的 LFS 文件,或通過 GitHub API 刪除遠程未引用的對象。

5. 突破限制的可行方案

(1)拆分大文件

  • 將單個 2GB 以上的文件拆分為多個 2GB 以內的片段(如使用?split?命令),分別上傳。
  • 示例:

    bash

    split -b 2G large_file.iso large_file_part_
    

(2)混合使用 LFS 和外部存儲

  • 對超過 2GB 的文件,將其存儲在云存儲(如 AWS S3、Google Cloud Storage),僅在 Git 中記錄下載鏈接。
  • 示例:

    markdown

    # 下載大文件的說明
    1. 訪問 [S3鏈接](https://example-bucket.s3.amazonaws.com/large_model.pth)
    2. 將文件放置在 `models/` 目錄下
    

(3)升級付費計劃

  • GitHub Team($4 / 用戶 / 月):提供 50GB 存儲 + 50GB / 月帶寬,單個文件支持 4GB。
  • GitHub Enterprise Cloud:支持 5GB 單個文件,存儲和帶寬配額更高。

總結

免費 GitHub 用戶的單個倉庫內的 Git LFS 文件最大支持 2GB,但需注意以下全局限制:

  1. 所有倉庫的 LFS 文件總存儲量:1GB。
  2. 每月帶寬配額:1GB。
  3. 倉庫總大小建議:控制在 1GB 以內(含普通文件和指針文件)。

若需頻繁處理大文件,建議結合外部存儲或升級付費計劃,以避免因配額不足影響協作。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/90868.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/90868.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/90868.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

不坑盒子:Word里1秒制作“花括號”題目,多音字組詞、形近字組詞……

1. 30秒看懂它能干啥 用“不坑盒子”插件,在 Word 里輸入: 樂,l(快樂),yu(音樂);長,chng(長短),zhǎng(長大)點一下【總分關系】,瞬間出現左邊是“樂”右邊并列兩行拼音括號的花括號結構;再點【并列關系】,又能做出只…

Gateway網關層灰度方案—xx互聯網醫院系統灰度發布設計與思路詳解

通過之前技術的積累,終于開始了本文的編寫,如果對灰度、負載均衡、上下文傳遞、網關不太理解,可以先學習博主的以下博客內容。共勉: 企業級 Java 應用灰度發布設計方案與實踐全解析《Spring 中上下文傳遞的那些事兒》 Part 1&…

學習游戲制作記錄(改進投擲劍的行為)7.27

1.實現劍跟隨飛行方向旋轉修改劍的預制體使劍的朝向對準右x軸Sword_Skill_Contorl腳本:private void Update(){transform.right rb.velocity;//時刻更新位置}2.實現劍插入地面或者敵人修改預制體為觸發器Sword_Skill_Contorl腳本:private bool canRotat…

嵌入式軟件面試八股文

目錄 一、指針函數和函數指針 二、指針的大小 三、sizeof 和 strlen 區別 四、數組指針和指針數組 五、C語言里面內存分配的方式 六、struct結構體和union聯合體的區別 八、數組和鏈表的區別 九、寫一個宏這個紅返回輸入參數比較小的一個 十&#xff0c;使用#include<…

Gradle#Plugin

查看任務來自那個插件 /gradlew tasks --all <taskName>Java Plugin Java Library Plugin

滲透高級-----測試復現(第三次作業)

文章目錄測試復現一&#xff0c;環境搭建二&#xff0c;通過VS Code連接cacti三&#xff0c;測試測試復現 一&#xff0c;環境搭建 1&#xff0c;在ubuntu虛擬機上安裝MySql數據庫&#xff1a; apt-get upgrade # 更新apt-get upgrade apt-get update # 更新apt-ge…

LINUX727 磁盤管理回顧1;配置文件回顧

邏輯卷快照 快照為什么這么小RAID 磁盤陣列 raid 0 raid 1 raid5 raid10raid0 raid1 raid5 raid6 raid10 rank;create raid0 mdadm -c /dev/md0 -l 0 -n 2 /dev/sdb3 /dev/sdb4 raid1 mdadm -c /dev/md1 -l 1 -n 2 /dev/sdb5 /dev/sdb6 raid5 mdadm -c /dev/md5 -l 5 -n 3 -x …

【筆記】Einstein關系式 D = ukBT 的推導與應用研究

文章目錄從漲落理論和能量均分定理的數學推導基于平衡統計力學的推導1. 漂移流的來源&#xff1a;Jdrift?μρ?UJ_{drift} -μρ?UJdrift??μρ?U物理機制粒子流的形成2. 擴散流的來源&#xff1a;Jdiffusion?D?ρJ_{diffusion} -D?ρJdiffusion??D?ρ3. 熱平衡要…

AJAX 原理_第一節_XHR 對象

文章目錄1.AJAX原理1.1 初識XML1.2 查詢參數1.3 案例-地區查詢1.4 案例-注冊-設置請求頭1.AJAX原理 1.1 初識XML AJAX原理是什么? XMLHttpRequest對象 XHR對象定義: 通過XMLHttpRequest可以在不刷新頁面的情況下請求特定URL,獲取數據.這允許頁面在不影響用戶操作的情況下,更…

BeautifulSoup 使用詳解與實戰示例

BeautifulSoup 是一個用于解析HTML和XML文檔的Python庫&#xff0c;它能夠將復雜的HTML文檔轉換成一個復雜的樹形結構&#xff0c;使得我們可以輕松地查找和提取所需的內容。下面我將詳細介紹BeautifulSoup的使用流程&#xff0c;并結合實際示例進行說明。一、安裝與基礎使用1.…

LangChain實戰——實現多輪對話 + Function Calling

隨著大語言模型&#xff08;LLMs&#xff09;的迅猛發展&#xff0c;“Function Calling”&#xff08;函數調用&#xff09;逐漸成為一個重要的能力&#xff0c;它使得模型不僅能聊天&#xff0c;還能像“中控大腦”一樣調用外部函數完成具體任務&#xff0c;比如查天氣、調用…

湖南(源點咨詢)市場調研 如何在行業研究中快速有效介入 起頭篇

行業研究從業人員經常需要在承接研究案子后快速的摸清委托方所在行業。而俗話說&#xff0c;隔行如隔山&#xff0c;快速了解行業&#xff0c;主要用于行業分析報告及為市場細分準入進行前期鋪墊&#xff0c;要想摸清一個行業&#xff0c;需要長期持續的跟蹤。了解一個行業&…

【c++】從 “勉強能用” 到 “真正好用”:中文問答系統的 200 行關鍵優化——關于我用AI編寫了一個聊天機器人……(16)

先看核心結論&#xff1a;兩段代碼的本質區別如果用一句話總結兩段代碼的差異&#xff1a;前者是 “帶中文支持的問答系統”&#xff0c;后者是 “真正適配中文的問答系統”。具體來說&#xff0c;兩段代碼的核心功能都是 “加載問答數據→接收用戶輸入→匹配答案”&#xff0c…

VR 技術在污水處理領域的創新性應用探索?

在廣州&#xff0c;VR 污水處理技術的應用可謂是多點開花。首先&#xff0c;在污水處理流程模擬方面&#xff0c;工程師們利用 VR 技術創建了高度逼真的污水處理廠三維模型&#xff0c;將污水處理的整個流程&#xff0c;從預處理去除大顆粒雜質和懸浮物&#xff0c;到初級處理通…

深度學習暑期科研項目(兩個月發EI論文)

深度學習暑期科研項目&#xff08;8周發EI論文&#xff09; 哈爾濱工業大學博士的六大選題對本科生而言&#xff0c;越早接觸系統的科研訓練開始上手科研項目&#xff0c;就越能在未來的升學求職中占據很大的優勢。暑假是提升個人簡歷、豐富科研經歷的最佳時期&#xff01;哈爾…

【RH134 問答題】第 1 章 提高命令行運行效率

目錄#!/bin/bash 是什么意思&#xff1f;PATH 變量有什么重要作用&#xff1f;echo 命令的作用是什么&#xff1f;解釋下列正則表達式的含義簡述正則表達式和 shell 模式匹配的區別&#xff0c;在 shell 命令使用正則表達式的時候需要注意什么&#xff1f;#!/bin/bash 是什么意…

OpenCV(02)圖像顏色處理,灰度化,二值化,仿射變換

【OpenCV&#xff08;01&#xff09;】基本圖像操作、繪制&#xff0c;讀取視頻 目錄圖像顏色加法灰度化二值化仿射變換圖像顏色加法 顏色加法 import cv2 as cv import numpy as np#讀圖 cao cv.imread(E:\hqyj\code\opencv\images\cao.png) pig cv.imread(E:\hqyj\code\o…

嵌入式——單片機的獨立按鍵

一、目的功能通過開發板上的獨立按鍵k1控制d1指示燈亮滅&#xff0c;k1一次亮再按一次滅。二、硬件原理圖三、消抖理解&#xff08;一&#xff09;核心原理&#xff1a;當事件被重復觸發時&#xff0c;設置一個延遲&#xff0c;只有在該時間內沒有新的事件被觸發&#xff0c;才…

機器學習的工作流程

&#x1f31f; 歡迎來到AI奇妙世界&#xff01; &#x1f31f; 親愛的開發者朋友們&#xff0c;大家好&#xff01;&#x1f44b; 我是人工智能領域的探索者與分享者&#xff0c;很高興在CSDN與你們相遇&#xff01;&#x1f389; 在這里&#xff0c;我將持續輸出AI前沿技術、實…

聚類里面的一些相關概念介紹闡述

一、性能度量外部指標&#xff1a;聚類結果與某個“參考模型”進行比較&#xff1b;系數&#xff1a; &#xff0c;其中的 表示樣本是否屬于某類簇&#xff1b; 指數&#xff1a;&#xff0c;其中 表示樣本在兩個聚類結果中都是同一類簇&#xff0c; 表示在其中一個聚類結果中…