Github 有一个大型推送文件的 限制。所以如果你想把一个大文件推到你的回购,你必须使用 Git LFS。
我知道在 git repo 中添加二进制文件是个坏主意。但是如果我在我的服务器上使用 Gitlab,并且在回购文件中没有文件大小的限制,并且我不在乎在我的服务器上回购文件的大小是否超大。在这种情况下,git lfs 的优点是什么? git clone或 git checkout会更快?
git clone
git checkout
与集中式系统相比,Git (和其他分布式系统)的一个特性是每个存储库都包含项目的全部历史。假设您创建了一个100MB 的文件,并以压缩效果不好的方式对其进行了100次修改。您最终将得到一个10GB 的存储库。这意味着每个克隆将下载10GB 的数据,在每台克隆的机器上消耗10GB 的磁盘空间。更令人沮丧的是: 即使你的 git rm文件很大,你仍然需要下载这10GB 的数据。
git rm
将大文件放在像 git-lfs 这样的单独系统中,只能将指向文件的每个版本的指针存储在存储库中,因此每个克隆只能为每个版本下载一小段数据。签出将只下载您正在使用的版本,即上面示例中的100MB。因此,您将使用服务器上的磁盘空间,但是节省了客户机上的大量带宽和磁盘空间。
除此之外,git gc(内部,git repack)使用的算法并不总是能很好地处理大文件。最近的 Git 版本在这方面取得了一些进展,它应该能够很好地工作,但是使用一个包含大文件的大存储库可能最终会给您带来麻烦(比如没有足够的 RAM 来重新打包存储库)。
git gc
git repack