如何在 Git 中存储大文件

x33g5p2x  于2022-02-12 转载在 其他  
字(1.4k)|赞(0)|评价(0)|浏览(355)

Git 以及 Github 等服务都是针对基于文本的轻量级代码文件构建和优化的,而且很少看到大于几 GB 的存储库。但是,跟踪大文件通常很有用,为了更容易,Git 提供了大文件存储 (LFS) 扩展。

Git 大文件存储 (LFS) 的工作原理

Git 在技术上没有最大文件大小,但是一旦你开始达到一定大小的文件,它就会开始崩溃。Github 将这个最大值定义为每个存储库 100 MB。

这个软限制归结为 Git 在内部存储数据的方式。尽管向用户显示了更改列表,称为差异,Git 实际上使用基于快照的方法在内部存储数据,并使用它来重建差异,而不是相反。

这对于少量数据来说是可以的,但是这意味着每次修改文件时都必须进行快照,因此如果文件很大,它会很快占用大量空间。Git 在内部使用“packfiles”对此进行了一些管理,它可以进行一些垃圾收集,但处理大文件的问题仍然存在。

因此,提出了一个名为Git 大文件存储 (LFS)的解决方案。基本上,Git LFS 不是将实际文件存储在存储库中,而是简单地存储一个指向该文件实际位置的指针。当您的 Git 客户端想要克隆存储库或签出文件时,它会改为从 Git LFS 下载它。
这意味着您不再需要下载每个版本化的对象来克隆存储库。LFS 使存储库的启动和运行速度更快,因为 Git 只关心指针,指针很小,并且只获取它需要的数据。

主要的缺点是您现在不能使用包文件,这意味着您将需要为文件的每个副本提供额外的存储空间。但是,LFS 允许您拥有一个具有最佳克隆时间的大型存储库,这不会影响开发人员的体验。

你可以在哪里使用 Git LFS?

要使用它,您需要一个配置为使用 Git LFS 的服务器。它只是 Git 的扩展,因此您无需安装任何额外的软件或设置服务器来处理数据存储。

Github 支持 Git LFS,但每个存储库只允许 10 GB。这适用于普通回购以及 LFS 回购。但是,从“设置”>“计费”中购买更多数据非常容易,而且 50 GB 每月只需额外支付 4.20 美元:

您还需要为带宽付费,因为更新大文件会复制文件并且必须发送整个文件。

如果您想托管特别大的存储库,并且想在自己的硬件上进行,我们建议使用自托管 Gitlab。您可以阅读我们关于设置个人 Gitlab 实例的指南以了解更多信息。

安装和使用 Git LFS

您需要从他们的网站下载并安装 Git LFS。

然后,在 Windows 上打开 Git 或 Git Bash,并运行 install 命令以验证它是否正常工作:

git lfs install

Git LFS 与 Git 本身有些不同。它不会自动跟踪超过一定大小的文件;您需要手动将文件添加到 Git LFS 才能开始使用它。您可以为此使用通配符语法:

git lfs track "*.dat"

您可以使用ls-files 和status 查看 Git LFS 子系统本身的状态:

git lfs ls-files
git lfs status

迁移到 Git LFS

如果您来自现有的 Git 存储库,或者在没有先在 Git LFS 中跟踪的情况下意外提交了某些内容,则需要使用该migrate 工具将数据移动到 LFS。

例如,导入与通配符匹配的所有现有文件:

git lfs migrate import --include="*.mp4"

或者只是将所有内容发送到 LFS:

git lfs migrate import --everything

您可能需要git push --force 覆盖分支历史记录。

相关文章