一个"大文件"有多大?必须要从Git LFS中受益?

时间:2018-02-27 21:14:46

标签: git git-lfs

我正在阅读Git LFS,并一次又一次地看到它适用于"大文件"

  

Git大文件存储(LFS)取代了大型文件,如音频样本,视频[...]

  

版本大文件 - 即使是那些大到几GB的大文件 - 使用Git。

  

Git大文件存储(LFS)是一个免费的开源扩展,它使用Git中的文本指针替换大文件,并将这些文件的内容存储在远程服务器上。

不幸的是,我什么都没看到"大文件"实际上是。很明显,占用几千兆字节的东西是一个大文件,但是那些更小的东西呢?

我是否会从Git LFS中受益于"大文件"小到50 MB? 20MB? 5MB? 1MB?不到1MB?

"大文件"有多大?与常规Git相比,必须从Git LFS中获益吗?

2 个答案:

答案 0 :(得分:6)

没有确切的阈值来定义什么是大文件。这取决于用户。要查看是否需要使用Git LFS存储一些文件,您需要了解git的工作原理。

Git和其他源代码控制工具(perforce,svn)之间最根本的区别在于Git在每次提交时都存储了存储库的完整快照。因此,当您有一个大文件时,快照包含此文件的压缩版本(如果文件未更改,则指向文件blob的指针)。存储库快照存储为.git文件夹下的图形。因此,如果文件 “大”,存储库大小将迅速增长。

有多个标准可以确定是否使用Git LFS存储文件。

  • 文件的大小。 IMO如果文件超过10 MB,您应该考虑将其存储在Git LFS

  • 文件修改的频率。应经常使用Git LFS存储大文件(基于大文件的用户直觉)

  • 文件的类型。无法合并的非文本文件可用于Git LFS存储

  

我可以从Git LFS中获得小到50 MB的“大文件”吗? 20MB? 5MB? 1MB?不到1MB?

根据文件更改的频率,提及的任何大小都可以获益。 考虑每次执行100次提交编辑文件的情况。对于可以压缩的20MB文件(例如15 MB),如果不使用Git LFS存储文件,则存储库大小将增加大约1.5GB。

答案 1 :(得分:-2)

LFS是一种维护项目资源的工具。假设您有一个项目,其中包含前端使用的*.psd个文件。这些文件通常很大,文件的版本控制与先前版本无关(git保存了提交中文本文件的更改历史记录,但对于二进制文件,这种方法无法使用。diff两个.cpp }文件有意义,但两张原始照片的diff没有。)。因此,如果您将资源放入存储库,其 size 并且克隆时间将会变得难看。而且维护很难。

如何克服这个问题?首先,一个好主意是从服务器端的代码中拆分大文件的数据库。另一个是客户允许他们想要在他/她的本地机器上使用他们想要使用的部分(即不是所有以前的文件)。

LFS做什么?它将其跟踪的文件和存储主题作为指向原始文件的指针。将原始文件存储到服务器端的单独数据库。本地存储库在其历史记录中包含所有指针,但是当您签出特定提交时,它只会提取其内容。以这种方式,本地存储库的大小和克隆时间将大大减少。

PS lfs中接收文件的方法与git不同。所以我认为它使用一些技术来分割大文件,将它们发送到不同的并行连接并合并它们......以及可以改善其功能的东西...但重要的是它可以为一百/几千个文件增加克隆/拉取的时间。

另请注意,git在Windows中大于4GB的文件存在问题。