git lfs有什么优势?

San*_*ter 34 git git-lfs

Github 对push大文件有限制.因此,如果您想将大文件推送到您的仓库,则必须使用Git LFS.

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

Mat*_*Moy 62

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

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

除此之外,git gc(内部git repack)使用的算法并不总是适用于大文件.Git的最新版本在这个领域取得了进展,并且它应该运行得相当好,但是使用包含大文件的大型存储库可能最终会让您遇到麻烦(例如没有足够的RAM来重新打包您的存储库).

  • 那么,只有经常修改那些大文件时,才使用 LFS 才有用吗?如果我想在存储库中保留一些我使用但从未修改过的软件包怎么办? (4认同)
  • 我总是抱怨它会随着时间的推移减慢 repo,但这是一个很好的具体例子!感谢您展示大小如何复合以及资源消耗! (3认同)
  • @sanjivgupta 在这种情况下,LFS 几乎没有什么好处。通过让您遵循 gitlfs 流程,您可以将文件标记为二进制文件;那么如果使用“git diff”访问该文件,它将防止它因大文件而潜在崩溃。此外,如果您决定将来更新其中一个软件包,您将通过仅克隆要克隆的分支的最新版本来获得 lfs 的预期好处。话虽如此,您应该尽可能为该场景使用包管理器。 (3认同)