git lfs管理大文件

在游戏开发过程中,设计资源占用了很大一部分空间. 像png,psd等文件是二进制(blob)的,体积也很庞大。但git的diff/patch等是基于文件行的.对于二进制文件来说. git需要存储每次commit的改动。每次当二进制文件修改,发生变化的时候. 都会产生额外的提交量.导致clone和pull的数据量大增.在线仓库的体积也会迅速增长。

LFS(Large File Storage) 就是为了解决这一问题而产生的工具.
它将你所标记的大文件保存至另外的仓库,而在主仓库仅保留其轻量级指针.
那么在你检出版本时,根据指针的变化情况下更新对应的大文件.而不是在本地保存所有版本的大文件

安装

  • Linux

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

    git lfs install
  • Mac

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

    下载安装 windows installer;

    运行 windows installer;

    在命令行执行 git lfs install;

使用

  • 执行 git lfs install 开启lfs功能;
  • 使用 git lfs track 命令进行大文件追踪 例如git lfs track “*.png” 追踪所有后缀为png的文件;
  • 使用 git lfs track 查看现有的文件追踪模式;
  • 提交代码需要将gitattributes文件提交至仓库. 它保存了文件的追踪记录;
  • 提交后运行git lfs ls-files 可以显示当前跟踪的文件列表;
  • 将代码 push 到远程仓库后,LFS 跟踪的文件会以『Git LFS』的形式显示:
  • clone 时 使用’git clone’ 或 git lfs clone均可;
  • 查看命令树:git log --oneline --graph --decorate --all

删除本地lfs

删除本地Git LFS文件,可以使用git lfs prune命令从本地Git LFS缓存中删除文件:

1
$ git lfs prune

lfs问题

取消lfs跟踪大文件,git pull工程可能导致之前的lfs文件失败,进入仓库目录:

1
git lfs pull

在重新提交到git上,就可以了。