知识篇| 全面认识Git lfs

我们经常在使用hugging face上模型和数据集时候,如果要想模下载到本地,要使用git lfs 方式下载。

那么与git有什么关系?什么是git lfs?

现在最流行的代码管理工具就是git, Git 是业界流行的分布式版本控制工具,仓库与远端仓库同样保存了全量的文件和变更历史,这样让代码协作变得简单和高效。随着科学数据分析和人工智能发展,发现我们代码有时候要和一些大文件放在一个工程里面进行管理. 但是Git针对大型文件(例如图片、视频或其他二进制文件)的版本控制,可谓是心有余而力不足,主要有两点问题:

(1) 效率变慢:不管实际上用户是否使用到这些大文件的历史,都需要把每一个文件的每一个版本下载到本地仓库。毫无疑问,增加用户等待的时间,好比下载一个电影,我们一般都要等待十几分钟以上。

(2)空间变大:一个Git仓库存放的大型的文件越多,Git仓库会以非常快的速率膨胀,占用更多的磁盘空间。

基于以上2点问题, Git工具显得捉襟见肘, 在一些游戏开发工程师、设计工程师和文档管理者中很难满足他们, 一方面,他们希望继续使用Git的版本控制和工作流能力,在另一方面Git仓库中大文件及其历史不断增多,导致工作效率越来越差。所以,针对上述的问题,Git LFS应运而生,是目前针对大文件场景下的主流的解决方案。

01 什么是git lfs?

Git LFS (Large File Storage)是一个开源的Git大文件版本控制的解决方案和工具集,工具自身是基于_Golang_进行实现,并在Github上开源。原理上是通过对Git客户端进行扩展的方式,从而集成并兼容了原生的Git客户端。Git LFS良好的设计,让用户感觉在对大文件处理过程中,与普通Git的使用方式上没有任何差别。

总之, Git LFS 是Git 的扩展,它可提供用于描述提交到存储库中的大型文件的数据。充分解决了Git在管理大文件的弊端。

02 Git vs Git lfs

2.1 git 场景

image.png

普通的git场景, 不论是针对小的代码文本文件、还是大的文件,如图片、视频,在相关变更从本地提交到远端仓库时,所有的相关文件资源都会完整的存储在git server。就图片中的例子而言,如果图片文件越来越多,改动频次越来越大,仓库的体积将极速膨胀起来。

2.2  git lfs 场景

image.png

Git LFS的场景: 如上图所示,我们可以针对jpg图片使用Git LFS的存储能力,在push过程中将其上传至大文件存储服务。同时,大文件对应的指针文件将连同其他的普通的代码文件推送到远端Git仓库中。也就是说git仓库只是存放大文件的指针,并没有存放真实的大文件, 大文件只是放在远端的大文件系统上。

03 Git lfs实操

3.1 下载和安装Git lfs

3.1.1 下载

(1) Linux Debian 和 RPM packages:

https://packagecloud.io/github/git-lfs/install

(2) Mac:

brew install git-lfs

(3) Windows:目前lfs已经集成在了Git for Windows 中,直接下载和使用最新版本的Windows Git即可。

(4) 直接下载二进制包:

https://github.com/git-lfs/git-lfs/releases

3.1.2 安装

  • 如果你选择使用二进制包下载后安装,直接执行解压后的_./install.sh_脚本即可,这个脚本会做两个事情:

  • 在_$PATH_中安装Git LFS的二进制可执行文件

  • 执行git lfs install命令,让当前环境支持全局的LFS配置

3.1.3 验证安装是否成功

git lfs install
#Updated pre-push hook.
#Git LFS initialized.
# 出现以上两条日志,说明安装成功

3.2  配置Git Lfs

可以在已有的git仓库或者空仓库,输入以下命令,配置git lfs, 需要执行_track_命令建立追踪:

git lfs track "*.csv"

友情提示: 使用 lfs track 命令时,"*.csv"的双引号非常重要,否则将影响pattern的文件匹配功能。track 命令实际上是修改了仓库中的.gitattributes文件,将该文件add添加到暂存区。

git add .gitattributes
#diff命令查看文件相关变动
git diff --cached

为了让"*.csv"的配置生效,需要将.gitattributes文件进行提交, 让Git LFS 配置生效:

git commit -m "Add \"*.csv\" LFS config "

验证是否可以, 新建一个.csv文件进行测试:

git add test.csv

由于 test.csv 后缀命中了.gitattributes中设置的"*.csv"的文件格式,所以将做为 LFS 文件处理。接下来,我们将dyrone.bigfile的变更提交并推送到远端:

git commit -m "add test.csv"
git push

如果存在LFS文件需要上传,在推送过程中将会显示LFS上传进度。至此,这个仓库中.csv的文件已经成功使用LFS进行管理,而其他文件使用Git进行管理。类似以下上传日志:

Uploading LFS objects:   0% (0/1), 0 B | 0 B/s, done

同样可以支持撤销继续跟踪某类文件,并将其从cache中清理:

git lfs untrack "*.csv"
git rm --cached "*.csv"

还支持历史文件转换为LFS管理, 到时候大家有兴趣可以深入再学习。

04 总结

Git lfs 为我们解决了大文件版本管理问题, 特别在LLM时代, 利用git lfs可以像管理代码那样简单地管理我们的模型和数据集。岂不美哉~

参考文章:

https://help.aliyun.com/document_detail/206889.html

(文章图片来此)

更多文章请关注我的公众号,一起学习一起进步:

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

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

相关文章

java:Multiple Bounds--类型变量(TypeVariable)定义的高级用法--<A extends ClassAIfAIfB >

做Java开发工作好多年了。今天偶然翻到 java.lang.TypeVariable的源码&#xff0c;好奇为什么 TypeVariable.getBounds()返回类型是个数组。 一般不都是<T extends Number> 这样用码&#xff1f;T难道还能extends多个类型&#xff1f; 同问&#xff1a;不应该是extend,为…

CSS-0_2 CSS和继承(inherit initial)

文章目录 CSS的层叠和继承inheritinitial很多你以为的样式初始值&#xff0c;其实是用户代理样式 碎碎念 CSS的层叠和继承 在上一篇 CSS和层叠、样式优先级 里已经讲过了层叠和优先级之间的关系&#xff0c;但是在CSS中的层叠除了体现在争抢露脸机会的优先级之外&#xff0c;还…

Python自动化(2)——键盘模拟

Python自动化(2)——键盘模拟 前台键盘模拟 前台键盘模拟和后台键盘模拟的区别在于&#xff0c;是否绑定窗口。即前台模拟是只模拟键盘操作&#xff0c;例如按下按键a&#xff0c;如果聚焦在一个文本文档的编辑区&#xff0c;那么就会把这个a输入进去。但如果是聚焦到了浏览器…

等保测评--第一级通用要求2

安全管理制度 管理 制 度 应建立日常管理活动中常用的安全管理制度 安全管理机构 岗位设置 应设立系统管理员等岗位,并定义各个工作岗位的职责 人员配备 应配备一定数量的系统管理员 授权和审批 应根据各个部门和岗位的职责明确授权审批事项、审批部门和批准人等 安全…

前端面试js高频手写大全

res.push(fn(arr[i])) } return res } 3. reduce实现数组的map方法 Array.prototype.myMap function(fn,thisValue){ var res []; thisValue thisValue||[]; this.reduce(function(pre,cur,index,arr){ return res.push(fn.call(thisValue,cur,index,arr)); },[])…

云计算考试题

Cloud ❀ 云计算-虚拟化常见的两种架构_裸金属架构和宿主型架构的区别-CSDN博客 为啥要成2 11 bcd 16 acd abcd BCD NAS为啥支持文件存储的协议 选BCD 什么是网络文件系统 选bcd 错题 选abc 选bcd 选 abd

Spring Cloud Gateway网关下的文档聚合(knife4j)

文章目录 引言I 服务发现自动聚合(discover)1.1 配置1.2 服务发现的路由聚合策略-数据来源1.3 编写动态路由实现类1.4 依赖II 其他2.1 网关动态加载swagger路由和配置2.2 无法处理 lb://URI,返回503错误。2.3 SpringBoot3 解决NoResourceFoundException: No static resource f…

让PG停摆一周的大会?2024 PGConf.dev 技术大盘点(下)

PGCon.Dev 的前身是 PGCon —— 最知名的 PostgreSQL Hacker 年度聚会&#xff0c;也可以说是决定 PostgreSQL 未来的会议。从 2007 年成立以来&#xff0c;一直都是在加拿大渥太华举办至今。 有多隆重呢&#xff1f;PG 核心组的 Peter Eisentraut 在会后做了一个统计&#xff…

建筑驱鸟设备 | 建筑专用超声波驱鸟器

从半夜的鸣叫到频繁的鸟粪污染&#xff0c;鸟类活动有时会成为城市居民不得不面对的小小困扰。通过合理的驱鸟方法&#xff0c;我们可以有效地减少鸟类对建筑物的侵扰&#xff0c;保护建筑物的完好和安全&#xff0c;同时维护城市居民的生活质量。 建筑专用超声波驱鸟器&#x…

PHP框架之ThinkPHP框架

ThinkPHP框架概述 ThinkPHP是为了简化企业级应用开发和敏捷WEB应用开发而诞生的开源轻量级PHP框架。它诞生于2006年初&#xff0c;原名FCS&#xff0c;2007年元旦正式更名为ThinkPHP&#xff0c;遵循Apache2开源协议发布。ThinkPHP从Struts结构移植过来并做了改进和完善&#…

为什么伦敦金新手不能用一小时图及以下的时间周期?

刚进入伦敦金市场的投资者&#xff0c;一般不建议使用较低的时间周期&#xff0c;如1小时图或以下。不仅如此&#xff0c;新手或者兼职投资者会被要求使用较高的时间周期交易&#xff0c;如4小时图或日线图&#xff0c;这有什么道理呢&#xff1f;下面我们就来讨论一下。 新手的…

从零开始如何学习人工智能?

说说我自己的情况&#xff1a;我接触AI的时候&#xff0c;是在研一。那个时候AlphaGo战胜围棋世界冠军李世石是大新闻&#xff0c;人工智能第一次出现我面前&#xff0c;当时就想搞清楚背后的原理以及这些技术有什么作用。 就开始找资料&#xff0c;看视频。随着了解的深入&am…

大数据面试-Scala

谈谈scala的闭包、柯里化、高阶函数 如果一个函数&#xff0c;访问到了它的外部&#xff08;局部&#xff09;变量的值&#xff0c;那么这个函数和他所处的环境&#xff0c;称为闭包。 闭包在函数式编程中是一个重要的概念&#xff0c;广泛用于高阶函数、柯里化等技术中。 函数…

社区团购系统智慧门店物流配送系统开发,支持小程序公众号。

目录 前言&#xff1a; 一、为什么要做社区团购小程序&#xff1f; 二、怎么做一个社区团购小程序&#xff1f; 三、制作属于自己的社区团购小程序有什么好处&#xff1f; 总结&#xff1a; 前言&#xff1a; 社区团购是针对小区居民或群体开发的在线购物平台&#xff0c;…

python之eval函数使用详解

eval() 是 Python 内置的一个函数&#xff0c;它可以将字符串最外侧的引号去掉&#xff0c;并且按照python语句方式执行去掉引号后的代码&#xff08;去掉引号后&#xff0c;代码可能还是字符串&#xff0c;可能是数字&#xff0c;可能是列表&#xff0c;可能是执行函数的代码块…

win10手动安装stable-diffusion-webui

目录 1.python下载安装 2.git下载安装 3.stable-diffusion-webui下载 4.安装s-d-webui的依赖包&#xff08;用国内镜像提速&#xff09; 5.git下载的stable-diffusion-webui&#xff0c;依赖包提示已安装&#xff0c;但运行webui-user.bat后&#xff0c;又开始下载 6.修…

RedTail 僵尸网络积极利用新漏洞发起攻击

自从 Palo Alto 的 PAN-OS 漏洞公开披露以来&#xff0c;研究人员发现已有攻击者将该漏洞纳入武器库中。 CVE-2024-3400 2024 年 4 月 11 日&#xff0c;Palo Alto 发布公告称基于 PAN-OS 的产品中存在的 0day 漏洞已经被攻击者利用&#xff0c;安全公司 Volexity 已经发现了…

配置 python 脚本操作Excel 环境

在已装python的前提下 一、安装依赖库 pip install pandas pip install openpyxl安装完后&#xff0c;可以在 Python 中运行以下命令来查看 pandas 或 openpyxl 的安装路径&#xff1a; import pandas as pd print(pd.__path__)import openpyxl print(openpyxl.__path__)二、测…

LearnOpenGL - Android OpenGL ES 3.0 绘制纹理

系列文章目录 LearnOpenGL 笔记 - 入门 01 OpenGLLearnOpenGL 笔记 - 入门 02 创建窗口LearnOpenGL 笔记 - 入门 03 你好&#xff0c;窗口LearnOpenGL 笔记 - 入门 04 你好&#xff0c;三角形OpenGL - 如何理解 VAO 与 VBO 之间的关系LearnOpenGL - Android OpenGL ES 3.0 绘制…

【C/C++】实现高性能日志轮转功能,已实测

基本实现 在C语言中实现日志文件轮转功能&#xff0c;你需要手动编写代码来处理文件的重命名、压缩和删除。下面是一个简单的C语言程序示例&#xff0c;它演示了如何实现基本的日志文件轮转功能。这个程序会检查日志文件的大小&#xff0c;如果超过预设的大小限制&#xff0c;…