乘风破浪,遇见最美Windows 11之现代Windows桌面应用开发 - Git大文件存储(LFS)解决源码库二进制文件托管问题
背景
我们知道Git用来托管源码代码是非常轻量和方便的,但是因为一些实际需要,我们可以需要把一些第三方的组件的二进制文件、或者项目资料放到库里面一起,但是和源码比起来,这些东西都是大家伙,不仅体积巨大,而且会影响到Git的整体使用速度,为了解决这个问题,Git扩展了一个大文件存储的方案,名为Large File Storage
, 简称LFS
。
什么是Git大文件存储(LFS)
https://git-lfs.github.com
Git大文件存储(Large File Storage, LFS) 将音频样本、视频、数据集和图形等大文件替换为Git内部的文本指针,同时将文件内容存储在GitHub.com或GitHub Enterprise等远程服务器上。
工作原理
如下图所示
安装Git大文件存储(LFS)
Windows下安装
在Git For Windows中就已经包括了它,原则上不用额外安装。
git lfs --version
Linux下安装
sudo apt install git-lfs
初始化LFS
git lfs install
配置Git大文件存储(LFS)
Github默认容量
Github默认就送了1GB的Git LFS空间,用完还可以单独买,从Settings
-Billing and Plans
-Git LFS Data
处可以看到使用和剩余情况。
勤学实战
https://github.com/TaylorShi/demoForGitLFS
创建示例项目demoForGitLFS
mkdir demoForGitLFS
Git初始化项目
将它进行初始化
git init
准备演示目录和文件
为了方便演示,我们在根目录创建一些文件
new-item 1.txt
new-item 1.dll
new-item 1.so
new-item 1.exe
另外我们最好往文件里面写入一些信息,必然它的大小将是零字节。
我们还创建一个目录,方便演示目录
mkdir Lib
接着我们在目录下面创建几个文件
cd Lib
new-item 1.so
我们也往里面写一些信息,避免零字节。
把指定目录加入追踪清单
git lfs track $targetDirName
比如,针对Lib这个子目录
如果需要包括Lib目录自身,那么采用
git lfs track Lib/**
如果不需要包括Lib目录自身,那么采用
git lfs track Lib/*
把指定格式的文件加入清单
git lfs track $targetFileExt
比如我想把dll
格式的都加入清单,那么采用
git lfs track *.dll
查看被追踪的清单
当我们把文件加入追踪清单之后,我们留意到在项目内新增了一个文件,它叫.gitattributes
,用来记录被加入追踪清单的规则。
查看被追踪的文件
想要查看哪些文件被追踪,也可以使用命令来列举
git lfs ls-files
按清单推送到代码库
我们需要找一个支持Git LFS的远程代码库,这里先以Github作为案例。
git push origin master
Git行结束符处理
在.gitattributes
也可以设置Git处理行结束符的策略。
当我们使用Git和其他用户协作时,在Windows系统和MacOs系统中按下回车键处理行结束符的方式可能会不一样。
为了让所有协作者都相对一致的处理这个问题,我们可以在解决方案的根目录下面通过.gitattributes
来设置,它将优先于用户的其他配置。
* text=auto
这个代表,文件的行尾自动转换。如果是文本文件,则在文件入Git库时,行尾自动转换为LF。如果已经在入Git库中的文件的行尾是GRLF,则文件在入Git库时,不再转换为LF。
*.dll filter=lfs diff=lfs merge=lfs -text
这里的-text
代表标记为非文本文件。
参考
- Git-LFS使用
- .gitattributes 作用详细讲解(git大佬必会技能)
- Git的gitattributes文件详解