Git LFS简介

简介

**Git LFS(Large File Storage)**,即Git大文件存储,目的是把大文件的版本管理存储到Git仓库的外部。虽说由于Git本身的文件变化存储机理,原则上是不使用Git存储大文件的。但是项目类型多种多样,很难避免不会出现一些体积较大的文件,而如果这些文件频繁修改的话就会导致Git仓库的体积不断膨胀。Git LFS的出现正是为了解决这个问题,通过配置记录追踪某些大文件,在推送版本到远程托管仓库时被追踪的大文件会默认保存到托管服务器的一个配置好的位置,而不是存储在Git仓库里,仓库里仅保留一个文件指针。当下次执行clone的时候,对于该大文件只会下载当前chekcout的版本对应的文件,而历史版本则不会被clone到本地仓库里,只有checkout到其他版本的时候才会再下载对应版本的文件。

优缺点分析

  • 优点:把存储大文件的压力转嫁给托管服务器,并且因为Git仓库体积的减少,可以节省下载仓库的带宽和时间;
  • 缺点:背离了Git去中心化的设计初衷,其本地仓库变成了一个不完整的仓库,操作变得极度依赖网络;

环境配置

  • 本地:确认本地安装了Git LFS,新版本的Git客户端默认集成了这个模块(如果不安装LFS可能会导致大文件下载不全等问题);
  • 线上:GitHub和新版本的GitLab都默认支持LFS,无需额外安装环境;

使用说明

  • 首次使用Git LFS需要先安装配置git lfs install,如果命令执行结果返回Git LFS initialized.则说明已经可用;
  • 在仓库里执行命令git lfs track "xxx"对文件进行追踪,可使用*匹配多个文件;
  • 上一步骤会在仓库里产生一个配置文件.gitattributes,如果搬来已存在则会更新内容,注意要把该配置文件的改动提交到Git仓库里;
  • 随后只需正常地在Git仓库提交该大文件即可:
1
2
3
git add xxx
git commit -m "xxx"
git push origin xxx_branch
  • push以后便可以在托管服务器上看到该文件被标识为LFS文件,不占用Git仓库的空间,而clone的时候也是按普通的仓库一样操作即可;

常用场景

  • 仓库迁移的时候,我们需要先把LFS文件的全部版本下载到本地,可执行以下命令:
1
git lfs fetch --all
  • 当本地仓库积攒了比较多版本的LFS导致体积较大的时候,可以通过以下命令进行清理:
1
git lfs prune
  • 若想了解Git LFS的其他命令,可在命令行执行help命令查看:
1
git lfs help