Git LFS 在大文件不变时的优势?

Advantage to Git LFS when large files don't change?

我正在考虑将 Git LFS 用于存储库,该存储库将包含我们的系统映像构建工具(在本例中为 Packer)使用的 ISO 和安装程序文件。然后我们将把它添加为我们的主仓库的一个子模块,它有构建脚本,这样它就可以集成到我们的 CI 工具链中。

据我了解Git LFS,大文件被替换为指针,因此 repo 拉取和维护很快,然后文件通过不同的渠道下载。

但是,当我们添加文件时,它们的名称中将包含版本号,因此不需要更新它们(例如 ubuntu-16.04.4-server-amd64.iso)。它们也不需要删除,因为我们将在构建脚本中通过该全名引用特定版本。我们基本上总是添加,很少(如果有的话)更新或删除。

好像GitLFS主要是更新/删除。我们的用例还有什么技术优势吗?

只会从 git lfs 下载您的分支中使用的当前文件。不会下载过去其他分支或提交的文件。

如果您将所有内容都放入标准 git 存储库中,将始终克隆所有内容,包括已删除的大文件 ,它们在历史记录中

因此 git lfs 将允许您更快地在构建服务器上工作,因为克隆和下载所需的时间更少。

我想这也是一种确保这些依赖项始终可用而无需依赖其他工具的简单方法。

It seems like Git LFS is mainly for updating / deleting.

Git-LFS 主要是为了减小存储库的大小。 git clone 通常会下载整个存储库,因此 git-lfs 主要影响 clone。存储库包括所有文件和这些文件的所有版本,包括已删除的文件

如果您进行较小的 Ubuntu 更新,并且 git rm ubuntu-16.04.4-server-amd64.isogit add ubuntu-16.04.5-server-amd64.iso 现在您将存储两个 ISO。另一个更新,它是三个。然后是四。五。六。如果没有 git-lfs,每个人都必须下载并存储所有那些已删除的旧 ISO。

如果您要存储操作系统 ISO 或媒体文件等大文件,它们会迅速增加存储库的大小。这意味着任何克隆您的存储库的人都必须花费时间和带宽来下载所有内容,并在所有内容上花费磁盘 space。这会使您的开发过程变得臃肿,并使人们犹豫是否要下载一个 20 gig 的存储库来处理一些文本文件。

Are there any remaining technical advantages for our use case?

是的。使用 git-lfs 的成本很低。如果你早点使用它,那么这个成本是最低的。

您可以稍后使用 git-lfs,但有一些附加条件。如果您在现有文件上使用它,它们将在 git-lfs 中继续存在,但它们的旧版本仍将存在于历史记录中。你可以 use the BFG to rewrite history to retroactively put existing large files into git-lfs,但你不想经常重写你的整个历史。您应该尽早使用 git-lfs

Here is a good run-down about what it takes to switch over later.

尽早使用 git-lfs 意味着开发人员不必仅仅因为内容太大就考虑是否将其放入存储库。如果他们觉得有什么东西应该放在版本控制中,他们就会把它放在版本控制中,不管大小。这简化了开发人员的决策过程,并使存储库更健康。如果您需要,比如说,在存储库中有六个不同的操作系统 ISO 用于测试,他们可以做到这一点,而无需争论存储库膨胀。

这也意味着您不必采取变通办法来解决存储库膨胀问题。有多种方法可以只克隆存储库的一部分,但它们都增加了复杂性。有一些方法可以让 Git 更有效地存储压缩的 ISO 和存档,你解压它们并让 Git 将它们存储为普通文件,但这又增加了复杂性。 git-lfs 意味着你可以让事情变得简单 (r)。

最后,git-lfs的存储端是灵活的。您不依赖 Github 或任何特定的 Git LFS 存储站点。