一、简介

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; 表示在其中一个聚类结果中…