git - git lfs 有什么优势?

标签 git git-lfs

Github 上有一个 limit推送大文件。所以如果你想推送一个大文件到你的仓库,你必须使用 Git LFS .

我知道在 git 仓库中添加二进制文件是个坏主意。但是如果我使用 gitlab在我的服务器上,repo 中的文件大小没有限制,我不在乎服务器上的 repo 大小是否超大。在这种情况下,git lfs 的优势是什么?git clonegit checkout 会更快吗?

最佳答案

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

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

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

关于git - git lfs 有什么优势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35575400/

相关文章:

git - 如何将 Git LFS 文件的旧版本打印到标准输出(Git show/git cat-file for LFS)?

git - 复制 git 存储库及其 GIT-LFS 设置

git - 了解 Git LFS 存储库如何为未安装 LFS 扩展的开发人员工作

git - 将一个 Git 存储库移动到另一个带有分支的子文件夹中

git - GitHub Desktop 中是否存在 'git status'?

git - 在 zsh 中,我如何根据程序的退出状态做一个条件?

Gitlab:通过部署 key 访问 git lfs 文件

svn - 源代码管理——如果、为什么、如何开始?

git log 命令不显示 HEAD 信息

git - 如何使 git LFS 不适用于子目录