【Git】全面认识Git lfs文章目录【Git】全面认识Git lfs01 什么是git lfs?02 Git vs Git lfs2.1 git 场景2.2 git lfs 场景03 Git lfs实操3.1 下载和安装Git lfs3.1.1 下载3.1.2 安装3.1.3 验证安装是否成功3.2 配置Git Lfs04 总结我们经常在使用hugging face上模型和数据集时候,如果要想模下载到本地,要使用git lfs方式下载。那么与git有什么关系?什么是git lfs?现在最流行的代码管理工具就是git, Git 是业界流行的分布式版本控制工具仓库与远端仓库同样保存了全量的文件和变更历史这样让代码协作变得简单和高效。随着科学数据分析和人工智能发展,发现我们代码有时候要和一些大文件放在一个工程里面进行管理.但是Git针对大型文件例如图片、视频或其他二进制文件的版本控制可谓是心有余而力不足主要有两点问题效率变慢不管实际上用户是否使用到这些大文件的历史都需要把每一个文件的每一个版本下载到本地仓库。毫无疑问增加用户等待的时间,好比下载一个电影,我们一般都要等待十几分钟以上。空间变大一个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 lfs2.1 git 场景普通的git场景, 不论是针对小的代码文本文件、还是大的文件,如图片、视频在相关变更从本地提交到远端仓库时所有的相关文件资源都会完整的存储在git server。就图片中的例子而言如果图片文件越来越多改动频次越来越大仓库的体积将极速膨胀起来。2.2 git lfs 场景Git LFS的场景: 如上图所示我们可以针对jpg图片使用Git LFS的存储能力在push过程中将其上传至大文件存储服务。同时大文件对应的指针文件将连同其他的普通的代码文件推送到远端Git仓库中。也就是说git仓库只是存放大文件的指针,并没有存放真实的大文件, 大文件只是放在远端的大文件系统上。03 Git lfs实操3.1 下载和安装Git lfs3.1.1 下载Linux Debian和RPM packagespackagecloud.io/github/…Mac:brewinstallgit-lfsWindows:目前lfs已经集成在了Git for Windows中直接下载和使用最新版本的Windows Git即可。直接下载二进制包github.com/git-lfs/git-…3.1.2 安装如果你选择使用二进制包下载后安装直接执行解压后的./install.sh脚本即可这个脚本会做两个事情在$PATH中安装Git LFS的二进制可执行文件执行git lfs install命令让当前环境支持全局的LFS配置3.1.3 验证安装是否成功gitlfsinstall#Updated pre-push hook.#Git LFS initialized.# 出现以上两条日志,说明安装成功3.2 配置Git Lfs可以在已有的git仓库或者空仓库,输入以下命令,配置git lfs, 需要执行track命令建立追踪gitlfs track*.csv友情提示: 使用lfs track命令时*.csv的双引号非常重要否则将影响pattern的文件匹配功能。track 命令实际上是修改了仓库中的.gitattributes文件将该文件add添加到暂存区。gitadd.gitattributes#diff命令查看文件相关变动gitdiff--cached为了让*.csv的配置生效,需要将.gitattributes文件进行提交, 让Git LFS配置生效gitcommit -mAdd\*.csv\LFS config 验证是否可以, 新建一个.csv文件进行测试gitaddtest.csv由于test.csv后缀命中了.gitattributes中设置的*.csv的文件格式所以将做为 LFS 文件处理。接下来我们将dyrone.bigfile的变更提交并推送到远端gitcommit -madd test.csvgitpush如果存在LFS文件需要上传在推送过程中将会显示LFS上传进度。至此这个仓库中.csv的文件已经成功使用LFS进行管理而其他文件使用Git进行管理。类似以下上传日志Uploading LFS objects:0%(0/1),0B|0B/s,done同样可以支持撤销继续跟踪某类文件并将其从cache中清理gitlfs untrack*.csvgitrm--cached*.csv还支持历史文件转换为LFS管理 到时候大家有兴趣可以深入再学习。04 总结Git lfs为我们解决了大文件版本管理问题, 特别在LLM时代, 利用git lfs可以像管理代码那样简单地管理我们的模型和数据集。岂不美哉~