"large file" 需要多大才能受益于 Git LFS?

How large does a "large file" have to be to benefit from Git LFS?

我正在阅读有关 Git LFS 的文章,并一次又一次地看到它对“大文件”非常有效

Git Large File Storage (LFS) replaces large files such as audio samples, videos[...]

Version large files—even those as large as a couple GB in size—with Git.

Git Large File Storage (LFS) is a free, open-source extension that replaces large files with text pointers inside Git and stores the contents of those files on a remote server.

不幸的是,我在任何地方都看不到“大文件”到底是什么。几千兆字节的文件很明显是一个大文件,但是更小的文件呢?

我是否可以从 Git LFS 中受益,“大文件”小至 50 MB? 20MB? 5MB? 1MB?小于 1MB?

与常规 Git 相比,“大文件”需要多大才能受益于 Git LFS?

LFS是一个维护项目资源的工具。假设您有一个项目,其中有 *.psd 个在 Front-end 中使用的文件。这些文件通常很大,并且文件的版本控制与以前的版本不符(git 在提交中保存文本文件的更改历史记录,但对于二进制文件不能使用这种方法。diff 两个.cpp 文件有意义,但两张原始照片的 diff 没有意义。)。因此,如果您将资源放入存储库,其 size 和克隆 time 的增长将很难看。而且维护起来会很麻烦

如何克服这个问题?首先,一个好主意是将大文件数据库从 server-side 中的代码中分离出来。另一个是客户端允许提取他们当前想要在 his/her 本地计算机上使用的部分文件(即不是所有以前的文件)。

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

PS: lfs接收文件的方法不同于git。所以我 认为 它使用一些技术来拆分大文件,将它们发送到不同的并行连接并合并它们......以及可以改善其功能的东西......但重要的是是它可以增加 clone/pull 的时间 hundred/thousands of small files.

另请注意,git 对于 windows 中大于 4GB 的文件有问题。

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

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

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

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

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

  • 存储
  • 文件的类型。无法合并的 non-text 文件适用于 Git LFS 存储

Will I benefit from Git LFS with "large files" as small as 50 MB? 20MB? 5MB? 1MB? Less than 1MB?

根据文件更改的频率,上述任何大小都可以让您受益。 考虑您每次都对文件进行 100 次提交编辑的情况。对于可以压缩到 15 MB 的 20MB 文件,如果不使用 Git LFS 存储文件,存储库大小将增加大约 1.5GB。