参考资料:
https://zzz.buzz/zh/2016/04/19/the-guide-to-git-lfs/
这篇随笔简单记录一下git lfs的使用教程,只记录最为常用的部分,并阐述原理,方便后面查阅。
首先说明一下git lfs的原理,看名称:git lfs。lfs即Large File Storage,git lfs扩展了git仓库的容量和功能性,使得一个git仓库不仅仅能容纳轻量的文件(代码等),还能容纳大的多媒体文件,如模型,数据等等。git clone, git pull无法handle的文件,git lfs就能轻松管理,并且在需要的时候能以几十M每秒的高速传送速率下载到本地。
一个典型的使用场景是hugging face模型库,官方给出了这样一个用例:
这个用例实际上就是lfs的最简单用法,即:如果你的git支持lfs(这个需要确认,它是一个插件)那么前两行代码应当能够高速把文件给爬下来。
那么如果我先不想下载这个仓库里面的大文件,想先暂时用一个个pointer作为lfs大文件的placeholder,应该怎么做?只需要配置GIT_LFS_SKIP_SMUDGE=1这个环境变量。
但是,如果一个仓库里面有多余的大文件,比如stable-dffusion有512和768的版本,我只想要前者,那么直接用git clone可能就太笨重,有没有更优雅的方式?这里推荐一种方式:
git lfs install
GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/prompthero/openjourney-v4
然后使用lfs fetch exclude命令使得git不拉取我们不想要的东西,如:
git config lfs.fetchexclude "*.jpg,*.png,*.tga"
上面这个命令其实就是存储在了.git/config文件里,然后我们运行:
git lfs fetch
git lfs checkout
就能够下载我们想要的东西,并且把想要的东西的Pointer换成真正的二进制文件了。