深入了解Git LFS:高效管理大型文件的利器

今天在使用CodeUp上传代码时,我为项目添加了一个大小超过300MB的文件。在进行push操作时,系统提示我"推送失败,以下文件大小超过单文件200MB的系统限额,大文件请使用Git-LFS管理"。于是我开始了解Git LFS。对于需要处理大型二进制文件的项目而言,Git的性能可能成为一个瓶颈。为了解决这个问题,Git引入了Git LFS(Large File Storage)------专门用于管理大型文件的扩展。在本文中,我们将深入探讨Git LFS的原理、使用方法以及它为项目带来的优势。

git-lfs.jpg

Git LFS是什么?

Git LFS官网地址:git-lfs.com/

Git 是业界流行的分布式版本控制工具,本地仓库与远端仓库同样保存了全量的文件和变更历史,这样让代码协作变得简单和高效。但也正因为如此,Git针对大型文件(例如图片、视频或其他二进制文件)的版本控制,也会存在一些问题,主要有两点:

  • 效率变慢:不管实际上用户是否使用到这些大文件的历史,都需要把每一个文件的每一个版本下载到本地仓库。毫无疑问,下载耗时的增加给用户带来了更多的等待时间。
  • 空间变大:一个Git仓库存放的大型的文件越多,加之伴随着其关联提交不断增多,Git仓库会以非常快的速率膨胀,占用更多的磁盘空间。

Git LFS是Git的一个扩展,旨在更有效地处理大型文件。它通过将大文件存储在单独的位置,而在Git仓库中只保留引用和元数据,来减小仓库的体积。这使得Git仓库能够更快速地克隆、推送和拉取,同时有效地处理大型媒体文件、二进制文件等。

安装Git LFS

  • Windows

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

  • Linux

直接下载二进制包:github.com/git-lfs/git...

直接执行解压后的./install.sh脚本即可,这个脚本会做两个事情:

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

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

初始化仓库和跟踪大文件

初始化仓库

安装成功后执行以下命令,让仓库支持LFS

复制代码
git lfs install

执行显示

erlang 复制代码
Updated Git hooks.
Git LFS initialized.

配置跟踪大文件

要使用Git LFS跟踪大文件,你需要使用git lfs track命令。例如:

arduino 复制代码
git lfs track "*.zip"

这告诉Git LFS来跟踪所有.zip。你可以使用通配符或者指定特定的文件名。

执行git lfs track(不带任何参数),可以查看当前已跟踪的Git LFS File 类型:

复制代码
git lfs track

会展示当前已跟踪的Git LFS File 类型或文件

scss 复制代码
Listing tracked patterns
    *.bigfile (.gitattributes)
    *.exe (.gitattributes)
    *.zip (.gitattributes)
Listing excluded patterns

track 命令实际上是修改了仓库中的.gitattributes文件,我们执行以下命令将该文件add添加到暂存区。

csharp 复制代码
git add .gitattributes 

为了让我们刚配置的跟踪文件生效,需要将.gitattributes文件进行提交:

sql 复制代码
git commit -m "添加.zip lfs配置"

撤销LFS跟踪

你可以取消继续跟踪某类文件,并将其从cache中清理:

bash 复制代码
git lfs untrack "*.zip"
git rm --cached "*.zip"

如果你想将这些文件添加回常规 Git 跟踪,可以执行以下操作:

sql 复制代码
git lfs track "*.zip"

git commit -m "重新添加.zip lfs配置"

提交和推送

一旦你设置好了Git LFS,可以像平常一样使用Git提交和推送文件。Git LFS将自动处理大文件的上传和下载。

sql 复制代码
git add .
git commit -m "Add large files"
git push origin master

拉取和检出

在拉取更改或切换分支时,Git LFS会自动下载所需的大文件。

复制代码
git pull origin master
git checkout other-branch

锁定和解锁文件

通过git lfs lock命令,你可以锁定大文件,以防止其他人修改它们。解锁文件允许其他人继续修改文件。

csharp 复制代码
git lfs lock some_large_file.jpg
git lfs unlock some_large_file.jpg

查看LFS信息

使用以下命令可以查看有关LFS的信息:

lua 复制代码
git lfs ls-files
git lfs status

这些命令提供了有关跟踪文件的详细信息,包括文件的大小和当前状态。

Git LFS工作原理

其工作原理如下:

  • Git 场景

git.png

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

  • Git LFS场景

gitlfs.png

如图片所示,我们可以针对jpg图片使用Git LFS的存储能力,在push过程中将其上传至大文件存储服务。同时,大文件对应的指针文件将连同其他的普通的代码文件推送到远端Git仓库中。

  • Git LFS处理流程

gitflsflow.png

优势和适用场景

Git LFS在以下方面为项目带来了显著的优势:

  • 更快的操作速度

由于只需处理文件的引用,Git LFS使得Git仓库的克隆、推送和拉取操作更加迅速。

  • 有效管理大型文件

对于大型媒体文件、二进制文件等,Git LFS提供了一种高效的版本控制方式,减小了仓库的体积。

  • 团队协作

锁定文件的功能使得团队能够更好地协同工作,防止冲突。

总结

总的来说,Git LFS是一个强大的工具,特别适用于那些需要处理大型文件的项目。通过更高效的文件管理,它使得团队能够更顺畅地进行版本控制,并确保项目的整体性能得到优化。

在项目中引入Git LFS可能需要一些额外的配置和学习,但一旦熟悉了其基本用法,你将能够更好地利用Git LFS的优势,提高开发流程的效率。

注:本文部分图片和文字引用的是阿里云的文档;

原文链接help.aliyun.com/document_de...

相关推荐
金銀銅鐵6 分钟前
[git] 浅解 git reset 命令
git·后端
zhangfeng113331 分钟前
部署到服务器上 宝塔系统 使用宝塔在线编辑器 FTP 批量上传 Git 部署 打包上传 codebudyy 编程程序开发
服务器·git·编辑器
学习是种信仰1 小时前
Git工作流
git·深度学习
yuanyuan2o23 小时前
Git merge 的几种不同模式
git·github
视觉小萌新3 小时前
关于Vscode配置企业Git
git
zh_xuan4 小时前
使用命令行把安装包上传到github
c++·git·libcurl·c++工程打包
zhangfeng11335 小时前
适合 5人以内小团队的Git 工作流 + Code Review + 自动化部署方案 FastAdmin +linunx服务器宝塔系统 外包项目 —
服务器·git·自动化·php·代码复审
念一不念二9 小时前
[Git]git仓库管理的使用
git
HZ·湘怡10 小时前
Gitee 手把手
git·gitee