Git LFS管理大文件

简介

Git LFS(Large File Storage) 可以把音频样本,视频,数据集,相片等大文件替换成文本指针文件,而这些二进制大文件会存储在远程 LFS 服务器上。当我们需要这些大文件时,Git LFS自动根据指针,从缓存目录中检出对应真实的文件,类似支持 Git LFS 的平台有 GitHub/Gitlab/bitbucket 等。在Unity开发中,可以用于管理模型、动画等大文件

Git-LFS 能降低整个仓库的体积,大大提高首次 git clone 的速度;只有执行 git checkout 分支和 commit 时,才会下载当前需要用到 LFS 文件,减少本地磁盘空间占用。

安装

  • Ubuntu

    1
    sudo apt install git-lfs
  • Windows

    1
    2
    3
    # 直接执行:
    git lfs install
    # 这一步为全局配置,以后如果想在其他仓库使用,无需配置

使用

文件指针示例:

1
2
3
version https://git-lfs.github.com/spec/v1  # 表示LFS的版本
oid sha256:e776ada24839066d9bcae89e6acb850cbedec26ea9c74842ea52694c24d536f3 # 表示文件对象的唯一hash值
size 135871155 # 表示文件的大小

使用方式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#为仓库安装LFS
git lfs install

#如果要追踪的文件还没有被Git管理,则要先add
git add <filename>

#让LFS追踪文件
git lfs track "Assets/Resources/Fonts/CN.asset"

#查看LFS追踪的文件列表
git lfs ls-files

#保存并提交配置
git add .gitattributes
git commit -m "LFS管理大文件"

#push
git push origin main

Git LFS的其他常用命令:

1
2
3
4
5
6
7
8
9
10
11
#追踪文件,支持正则表达式
git lfs track "文件名"

#取消追踪文件
git lfs untrack "文件名"

#取消配置LFS
git lfs uninstall

#下载当前提交的所有LFS内容
git lfs pull

一些使用中遇到的问题:

  1. 远程仓库要提前设置:

    Setting -> General -> Archives

  2. Remote “origin” does not support the LFS locking API. Consider disabling it with:

    按照提示进行操作即可

    1
    git config lfs.你的仓库链接 false
  3. 当进行push时才发现有大文件没有使用LFS进行管理:

    1
    2
    3
    4
    5
    6
    7
    8
    #改写提交历史
    git lfs migrate import --include-ref=master --include="文件"
    # --include-ref指定分支,如果要应用到所有分支,使用 --everything
    # --include指定文件,可以使用通配符等
    # 不想改写提交历史,加入 --no-rewrite 选项

    #改写提交历史后,需要强制推送
    git push origin main --force