git lfs原理和使用

如果我们用git管理的项目中出现了一些大文件, 同时若其数量比较多, 而且更新又比较频繁, 那么当首次clone该项目时, 就会不可避免地将这些大文件的当前版本和历史所有版本的文件都下载下来, 虽然你很可能用不到这些历史文件, 但是却不得不为它们所占用的额外空间买单.

git lfs(large file storage)就很好地解决了这一问题. 通过将大文件替换为小指针的方式, 当你真正需要到这些大文件的时候, 它才会从本地或者远端的lfs缓存中下载这些大文件.

git lfs拥有本地lfs缓存和远端的lfs存储仓库.

当你add一个文件时, git lfs用一个指针替换了其中的内容, 并将文件存储在本地的git lfs缓存中

当你push一个文件时, 除过普通的文件会被正常push, 这些lfs文件也会被从本地lfs缓存传输到远端lfs存储仓库

当你checkout一个包含lfs 指针的提交的时候, 那么指针文件就将被本地lfs缓存中的备份, 或者lfs存储库中的备份替换

该指针当然也是一个文件, 内容如

version https://git-lfs.github.com/spec/v1
oid sha256:5b62e134d2478ae0bbded57f6be8f048d8d916cb876f0656a8a6d1363716d999
size 285

里面的第一行是一个指针文件规范URL, 第二行是对象id, 第三行是文件有多少字节.

如何下载git lfs

可以通过网站 https://git-lfs.github.com/ 下载tar包, 比如git-lfs-linux-amd64-v2.9.0.tar.gz, 解压后运行

chmod 755 install.sh
sudo ./install.sh
git lfs install

如何在项目中使用git lfs

你可以使用普通的git clone命令来clone项目, 如果该项目中含有lfs文件, git会在clone的结尾帮你监测出所有的git lfs文件. 当然你也可以用git lfs clone来加速, 并且git会等到checkout完成后在批量下载所有需要的lfs文件. 这可以显著减少http请求和进程的数量.

同样git pull命令也是可以正常使用, 如果lfs文件有丢失, 那么可以通过git lfs pull来下载当前丢失的lfs文件内容.

可以使用git lfs track指令来指定追踪指定的文件为lfs文件, 指定方式与.gitignore方式相同, 支持对单个或者通配的多个文件指定. 对于使用通配符指定时, 需要加上"", 比如git lfs track "*.so", 否则该通配符会被shell扩展. 使用untrack可以取消对某文件的追踪. 追踪的文件名单在.gitattributes中可以找到. git lfs ls-files 可以查看所有的lfs文件, git lfs status可以查看当前add的lfs文件

同样地, git push就可以提交并推送lfs内容到远端仓库.

你可能感兴趣的:(▶︎Git,git,linux,github,git,lfs,lfs)