如何将二进制文件存储在版本控制系统中,它们本身并不大,但 git 历史变大了?

How store binary files in a version control system that themselves are no big, but the git history get big?

我在一个白标项目中担任 iOS 开发人员,因此,我们有一个包含所有项目资源(图像、字体、文本等)的存储库,并且我们还生成了一个每个产品 bundle file(以及带有图像和颜色的 car 文件)。不知道的人,bundle文件其实就是一个存放所有资源的文件夹,有点像包的意思。我们使用它来轻松更改不同产品的所有资源,并且我们希望静态构建,而不是通过后端获取资产。

我们在项目中遇到的问题以及我寻求其他问题的问题总是与大文件有关,但问题不在于大文件,而是一组小的二进制文件和捆绑文件(关于 5mb 所有文件和 14mb,分别为每个产品),但由于 git 历史,存储库总是越来越大。对于某些开发人员,他们的 Mac 中只有此存储库中有大约 2gb

我已经用过git repack -a -d --depth=250 --window=250,我们有一些改进,但两周后它又变大了,我不得不再次使用。

我的问题是:存储这些文件的最佳方式应该是什么?我看到有些人建议使用 Git LFSSVN,但我总是看到比我的文件大得多的文件有,所以我认为对于一个简单的问题来说,如果不是太多,在我做出决定之前所有的选择应该是什么,以后会后悔。

如果您将捆绑文件存储在 Git 中,绝对不要这样做。 Git 不应用于存储任何构建产品或外部依赖项,例如框架。 Git 应仅用于存储此特定项目的内容。

话虽如此,如果您仍然有相当数量的二进制文件,您可以尝试 Git LFS。这是这种情况的典型解决方案。

但是,如果您的 Git 服务器使用的是最新版本的 Git(例如,GitHub),那么您也可以使用部分代码重新克隆存储库克隆代替。这将保留您的历史记录,但避免下载更大的 blob,并在结帐或其他操作需要时从服务器获取它们。请注意,这需要在您的 Mac 上安装最新版本的 Git,如果您使用 Homebrew 的 git 软件包,您将拥有它。

您可以通过 运行 git clone --filter=blob:limit=1m URL 来做到这一点,这将防止拉下大于 1 MiB 的 blob。