Github在推送大文件上有一个limit。因此,如果您想将大文件推送到您的仓库,则必须使用Git LFS。
我知道在git repo中添加二进制文件是个坏主意。但是如果我在我的服务器上使用gitlab并且在回购中没有文件大小的限制,并且我不在乎我的服务器上的回购邮件大小超大。在这种情况下,git lfs的优势是什么?git clone
或git checkout
会更快?
答案 0 :(得分:52)
与集中式系统相比,Git(和其他分布式系统)的一个特点是每个存储库都包含项目的整个历史记录。假设您创建了一个100 Mb文件,以不能很好压缩的方式对其进行100次修改。您将获得10 Gb存储库。这意味着每个克隆将下载10 Gb的数据,在您正在进行克隆的每台计算机上占用10 Gb的磁盘空间。更令人沮丧的是:即使您git rm
这些大文件,您仍然需要下载这些10 Gb的数据。
将大文件放在像git-lfs这样的独立系统中,只允许存储指向存储库中每个文件版本的指针,因此每个克隆只会为每个修订版下载一小段数据。结帐将仅下载您正在使用的版本,即上例中的100 Mb。因此,您将在服务器上使用磁盘空间,但在客户端上节省了大量带宽和磁盘空间。
除此之外,git gc
(内部,git repack
)使用的算法并不总是适用于大文件。 Git的最新版本在这个领域取得了进展,它应该运行得相当好,但是使用包含大文件的大型存储库可能最终会让你遇到麻烦(比如没有足够的RAM来重新打包你的存储库)。