" transform="translate(10.232 59.216) scale(1.339)" font-size="18" fill="#fff" font-family="DFShiYiW5-GB"></>
Git LFS 全名 Git Large File Storage,是Github带头在2015年推出的解决方案。
Git仓库大了怎么办?
文件大了不敢放?
音视频担心占用空间?
工蜂Git支持大文件存储了!查阅Git LFS解决方案,快来将音频、图片、安装包、甚至数据文件加入版本控制。
Windows / Linux 安装包
GIT LFS下载:官网下载页
注意:Windows用户的Git客户端推荐使用2.16+的版本,如果版本太低可能无法使用lfs
Windows / Cygwin 安装
根据安装向导安装下载的 .exe 包后,启动一个新的命令行窗口(以使包含 git-lfs 命令的目录能被加载进 PATH,并执行以下命令:
git lfs install
BSD / Linux
下载完压缩包后,打开命令行进入下载文件所处的目录,并执行以下命令:
tar xf git-lfs-*.tar.gz
cd git-lfs-*
sudo ./install.sh
也可使用内置支持Git LFS的客户端,例如SourceTree
Mac
brew install git-lfs
git lfs install
执行命令
git lfs install
例如,添加目录下所有的.psd和.a文件,使其被LFS托管
git lfs track "*.psd"
git lfs track "*.a"
或者直接编辑 ".gitattributes" 文件
注意:".gitattributes"需要加入到git库中,LFS文件才能被其他人识别
如果自己的相关工作不涉及到被 Git LFS 所管理的文件的话,可以选择只获取 Git 仓库自身的内容,而完全跳过 LFS 对象的获取。
GIT_LFS_SKIP_SMUDGE=1 git clone http://git.code.tencent.com/test/test.git
# 或
git -c filter.lfs.smudge= -c filter.lfs.required=false clone http://git.code.tencent.com/test/test.git
注意: GIT_LFS_SKIP_SMUDGE=1 及 git -c filter.lfs.smudge= -c filter.lfs.required=false 同样使用于其他 git 命令,如 checkout, reset 等
如果起初获取代码时,没有一并获取 LFS 对象,而随后又需要这些被 LFS 管理的文件时,可以单独执行 LFS 命令来获取并签出 LFS 对象:
git lfs fetch
git lfs checkout
# 或
git lfs pull
经过以上几步,您的psd和a文件就会在push时自动向LFS服务器提交了。
存储和管理大型文件的版本,是一个由来已久的难题。由于需要记录全部历史版本,在托管比较大的文件时,以往的代码仓库往往不太给力。
SVN
系统会把每次提交的文件差异存储下来,当用户新拉取一个文件时,需要取得所有的差异集,并把他们拼装相加,再返回一个完整的文件给用户。如果仅是满足代码文件(文本)的需要,这种机制是十分顺畅的。但当图片、音视频、数据集、程序包、二进制文件时,状况就会开始恶化。如果版本数量较少,计算机凭借优异的性能,可以做到用户无感知。但当版本较多,文件很大时,CPU的计算资源会逐渐成为瓶颈,其体现就是 SVN CO 速度越来越慢。慢并非是网络传输造成的,而是版本数、碎片、文件大小共同作用,使CPU和IO到达瓶颈带来的。
Git
Git虽然没有SVN合并差异计算的问题,相比SVN利用空间替换了CPU的计算时间。但由于分布式要求,客户端往往会克隆整个仓库来本地,也包含了文件历史。如果历史版本较多,用户就要等每个版本从网络传输到本地。因此,用户克隆的时间包含了下载所有历史版本到本地的时间。如果文件比较大,会变成所有人的梦魇。
用Git LFS管理二进制文件后,将获取最优异的能效比。
它使用简单,只需在客户端安装并执行一次配置命令,之后像往常一样操作即可,保留一贯的使用习惯。
它效率高,只在需要的时候才下载版本文件,不会下载版本历史。
它保障强,所有历史记录均会在服务端保存。
它和原生Git巧妙结合,没有安装LFS extension的用户,仅仅取不到对应的大文件而已,并不影响版本库的日常操作。
向服务器提交时,Git LFS把文件上传到一个专用的存储区域,同时保存一份指针(文本文件)在原有的版本库中。
当另外一个人拉取,他将首先拉取到指针,此时Git LFS解析这个指针,并把实际文件内容取回到本地。
文件每有一个新版本时,就会创建一个新指针,并向服务器上传,这样服务器上就有了多个历史版本,从而实现了基本的版本管理。
在腾讯工蜂Git服务器上,LFS Server上的文件同样受到与其他项目文件相同级别的安全和权限控制。