Git 大文件存储 lfs

本文最后更新于:2022年5月13日 下午

Git LFS(Large File Storage, 大文件存储)是 Github 开发的一个 Git 的扩展,用于实现 Git 对大文件的支持。

简介

Git LFS(Large File Storage, 大文件存储)是 Github 开发的一个 Git 的扩展,用于实现 Git 对大文件的支持。

  • Git LFS可以把音乐、图片、视频等指定的任意文件存在 Git 仓库之外,而在 Git 仓库中用一个占用空间 1KB 不到的文本指针来代替文件的存在。

  • 通过把大文件存储在 Git 仓库之外,可以减小 Git 仓库本身的体积,使克隆 Git 仓库的速度加快,也使得 Git 不会因为仓库中充满大文件而损失性能。

  • 要使用 Git LFS 只需要经过一次下载安装后,指定需要由 Git LFS 管理的文件即可。

  • git每次保存diff,一些大文件发生变化时,整个仓库就会增加很大的体积,导致clone和pull的数据量大增。对于git lfs来说,在使用git lfs track命令后,git push的时候,git lfs会截取要管理的大文件,并将其传至git lfs的服务器中,从而减小仓库的体积

  • LFS 对目录是不生效的(但在git远程仓库也是提示LFS)

原理:不同于git每次保存diff,对于git来说,如果是模型文件或者一些设计大文件,改变一点,对于仓库来说会增加很大的体积。对于git lfs来说,在使用git lfs track命令后,git push的时候,git lfs会截取要管理的大文件,并将其传至git lfs的服务器中,从而减小git仓库的体积。

注意:安装 Git LFS 需要 Git 的版本不低于 1.8.5

LFS 安装

git 2.+ 版本已经自带 lfs 不需要额外安装,如果需要升级 lfs 事实上建议直接升级 git 的版本,单独升级 lfs 可能会造成版本不匹配的问题

Windows 系统

  • 通过https://git-lfs.github.com/下载 Git LFS 安装包。

  • 双击安装包,打开安装 git-lfs

  • 在命令行中执行 git lfs install(需要确认 git-lfs 命令已经被包含在环境变量中)

Linux 系统

1
2
3
4
curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash
sudo apt-get install git-lfs

git lfs install

Mac OS 系统

1
2
3
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install git-lfs
git lfs install

用法

  1. 查看现有的文件追踪模式:

    1
    git lfs track
  2. 添加要管理的大文件的文件类型,比如gz文件

    1
    git lfs track *.gz

    添加类型后,查看管理文件.gitattributes,可以发现.gitattributes中新增加一行:

    1
    *.gz filter=lfs diff=lfs merge=lfs -text
  3. 将管理文件.gitattributes提交至仓库. 它保存了文件的追踪记录

  4. 获取git lfs管理的所有文件列表:

    1
    git lfs ls-files
  5. 通过 git show 可以查看 lfs 文件

    1
    2
    3
    4
    git show HEAD:Memory/noise.jpg
    version https://git-lfs.github.com/spec/v1
    oid sha256:7e7434bc0bc5450d8499733547b6fe1d3be016cdbe3f8341b882d00d8627f7e4
    size 1094790
  6. 添加大文件到git仓库,和其它添加方式一样

    1
    2
    3
    git add my.gz
    git commit -m "add gz file"
    git push
  7. 将代码 push 到远程仓库后,LFS 跟踪的文件会以『Git LFS』的形式显示

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    $ git push                             
    Uploading LFS objects: 0% (0/1), 164 KB | 0 B/s
    Uploading LFS objects: 0% (0/1), 426 KB | 0 B/s
    Uploading LFS objects: 0% (0/1), 786 KB | 213 KB/s
    Uploading LFS objects: 100% (1/1), 1.1 MB | 213 KB/s
    Uploading LFS objects: 100% (1/1), 1.1 MB | 213 KB/s, done.
    Enumerating objects: 11, done.
    Counting objects: 100% (11/11), done.
    Delta compression using up to 4 threads
    Compressing objects: 100% (6/6), done.
    Writing objects: 100% (8/8), 846 bytes | 846.00 KiB/s, done.
    Total 8 (delta 2), reused 0 (delta 0), pack-reused 0
    remote: Resolving deltas: 100% (2/2), completed with 1 local object.
    To github.com:zywvvd/Python_Practise.git
    454ff61..d44e68a master -> master

  8. clone 时 使用git clone’或 git lfs clone均可

  9. 查看Git LFS 的帮助:

    1
    git lfs help

: Git version > 1.8.5 如未安装LFS,拉取到本地LFS文件将是约1K的ASCII text文本文件(但通过du -sh查看目前的大小此目录依旧很大,那是因为.git/objects 目录存的git log文件占用)。

参考资料


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!