66

Github对推送大文件有限制。所以如果你想将一个大文件推送到你的仓库,你必须使用Git LFS

我知道在 git repo 中添加二进制文件是个坏主意。但是,如果我在我的服务器上使用gitlab并且 repo 中的文件大小没有限制,并且我不在乎我的服务器上的 repo 大小是超大的。在这种情况下,git lfs 有什么好处呢?git clone还是git checkout会更快?

4

1 回答 1

110

与集中式系统相比,Git(和其他分布式系统)的一个特点是每个存储库都包含项目的整个历史。假设您创建了一个 100 MB 的文件,以一种压缩效果不佳的方式对其进行了 100 次修改。您最终将获得一个 10 GB 的存储库。这意味着每个克隆将下载 10 GB 的数据,在您进行克隆的每台机器上占用 10 GB 的磁盘空间。更令人沮丧的是:即使你git rm是大文件,你仍然需要下载这 10 GB 的数据。

将大文件放在像 git-lfs 这样的单独系统中,您可以只存储指向存储库中每个文件版本的指针,因此每个克隆只会为每个修订下载一小段数据。结帐将仅下载您正在使用的版本,即上面示例中的 100 MB。结果,您将使用服务器上的磁盘空间,但在客户端上节省了大量带宽和磁盘空间。

除此之外,git gc(内部,git repack)使用的算法并不总是适用于大文件。最新版本的 Git 在这方面取得了进展,它应该可以很好地工作,但是使用一个包含大文件的大型存储库最终可能会给你带来麻烦(比如没有足够的 RAM 来重新打包你的存储库)。

于 2016-02-23T13:21:28.270 回答