首页 > 其他分享 >深入了解Git LFS:高效管理大型文件的利器

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

时间:2023-12-20 12:06:38浏览次数:35  
标签:文件 Git LFS 仓库 利器 git lfs


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

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

Git LFS是什么?

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

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

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

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

安装Git LFS

  • Windows

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

  • Linux

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

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

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

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

初始化仓库和跟踪大文件

初始化仓库

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

git lfs install

执行显示

Updated Git hooks.
Git LFS initialized.

配置跟踪大文件

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

git lfs track "*.zip"

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

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

git lfs track

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

Listing tracked patterns
    *.bigfile (.gitattributes)
    *.exe (.gitattributes)
    *.zip (.gitattributes)
Listing excluded patterns

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

git add .gitattributes

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

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

撤销LFS跟踪

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

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

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

git lfs track "*.zip"

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

提交和推送

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

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命令,你可以锁定大文件,以防止其他人修改它们。解锁文件允许其他人继续修改文件。

git lfs lock some_large_file.jpg
git lfs unlock some_large_file.jpg

查看LFS信息

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

git lfs ls-files
git lfs status

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

Git LFS工作原理

其工作原理如下:

  • Git 场景

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

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

  • Git LFS场景

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

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

  • Git LFS处理流程

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

优势和适用场景

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

  • 更快的操作速度

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

  • 有效管理大型文件

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

  • 团队协作

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

总结

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

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

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

标签:文件,Git,LFS,仓库,利器,git,lfs
From: https://blog.51cto.com/xiuji/8905207

相关文章

  • kubernetes(k8s)Gitlab CI Runner 的安装
    kubernetes(k8s)GitlabCIRunner的安装简介从Gitlab8.0开始,GitlabCI就已经集成在Gitlab中,只要在项目中添加一个.gitlab-ci.yml文件,然后添加一个Runner,即可进行持续集成。在介绍GitlabCI之前,先看看一些GitlabCI的一些相关概念。流程逻辑如下:Jobs->Stages->Pipel......
  • gitlab代码怎么拉到本地
    1、本地目录新建一个文件夹:文件夹进入后,右键执行gitBashhere先初始化:gitinit git服务上选择develop分支: 然后选择HTTP克隆:把gitlab复制下来:http://scm.skytech.io.../.../eas_api_framework.git然后紧接着上面执行:git pulllURL把代码拉下来 拉下来后,用Py......
  • 以 Git 为例演示 CentOS 系统安装软件的方式
    前言在Linux系统上安装软件有两种常用的方式。一种是通过包管理工具,直接安装;另一种是先下载源码,然后再手动编译,再安装。本文以Git为例,演示这两种安装软件的方式。使用yum安装Yum是CentOS的包管理工具。使用前先更新下Yum源:yumupdate使用包管理器安装软件非常简单,直接一......
  • git 合并分支处理
    前提合并分支之前,拉取需要合并的两个分支的最新代码;(gitpull)gitcheckout<brachName> //切换分支gitbranch-a  //查看所有分支gitstatus    //查看当前分支状态gitlog      //查看当前分支日志 gitmerge需要合并到哪个分支,就切换到哪个......
  • 07信息打点-资产泄漏&CMS 识别&Git 监控&SVN&DS_Store&备份
    一、知识点CMS指纹识别源码获取方式习惯&配置&特性等获取方式托管资产平台资源搜索监控二、详细点源码泄漏原因:从源码本身的特性入口从管理员不好的习惯入口从管理员不好的配置入口从管理员不好的意识入口从管理员资源信息搜集入口源码泄漏集合:composer.jsongit源码泄露svn......
  • Git — husky + eslint 实现提交前校验与规范提交
    node版本:=14.21.3||>16.0.0一、配置ESlint1.1安装eslintnpminstalleslint-D1.2初始化eslint,生成配置文件npxeslint--init1.3在编辑器安装ESlint插件1.4通过执行命令检测文件代码规范#./src为需要检测的文件路径npxeslint./src二、配置husky2.1安......
  • GitHub 如何修改 Fork from
    如果你的仓库上面是Forkfrom的话,我们有什么办法能够取消掉这个Forkfrom?  解决办法GitHub上面没有让你取消掉Fork的办法。如果进入设置,在可见设置中也没有办法修改仓库的可见设置选项。  唯一的解决办法就是对你需要修改的仓库先全部克隆到你的本地计算机上,......
  • Git:submodule子模块操作
    一、子模块添加gitsubmoduleadd<url><path>gitsubmoduleaddhttps://github.com/../.gitthemes/MeiFixIt二、子模块更新gitsubmoduleupdate--remote--merge三、下载子模块同父模块一起下载子模块gitclone--recurse-submodules<repository-url>父模块......
  • HbuilderX配置Git插件并导入项目和上传代码
    一、安装git从 git官网 下载windows版本的git,然后进行安装,一般不需要只需要默认next就可以了二、安装TortoiseGit工具到 TortoiseGit官网 下载对应的TortoiseGit包进行安装【一般使用默认设置即可:一路next下去,TortoiseGit安装完毕!】三、安装TortoiseGit-LanguagePack中文语言......
  • github加速软件fetch-github-hosts索引
    详细链接进入文件夹E:\github-host_v2.6\fetch-github-hosts.exe-m=clientWindows启动fetch-github-hosts.exe-m=client自定义获取时间间隔Windows(10分钟获取一次)fetch-github-hosts.exe-i=10自定义获取链接Windowsfetch-github-hosts.exe-u=http://127.0.0.1:9898/......