正在清理对 GitHub 来说太大的 git-lfs 存储库
Cleaning up a git-lfs repository that is too big for GitHub
我有一个 git 存储库,其结构如下
+ LICENSE
+ README.md
+ experiments
+ ... (large csv files stored with git-lfs)
+ reports
+ ... (pdf files stored with git-lfs)
+ demos
+ ... (small example scripts)
+ src
+ ... (main codebase)
+ tests
+ ... (unit tests)
我的工作涉及 运行 实验,我使用 git-lfs 来存储实验结果,包括数据(csv 文件)和结果(主要是 pdf 格式的数据图,pdf-演示文稿)。
最近,我 运行 进行了更大的实验,并将一个大小为几千兆字节的 csv 文件添加到 git-lfs。官方的git-lfs实现是没有文件大小限制的,所以我觉得把这个存到git里应该没问题。然而,我确实将大型 csv 拆分为多个小型 csv,因为我听说一些 git-lfs 实现在文件 > 3GB 时存在问题。
无论如何,添加这个大文件是一个可怕的错误。提交所有内容后,我尝试将更改推送到 GitHub 并收到以下错误消息。
batch response: This repository is over its data quota. Account responsible for LFS bandwidth should purchase more data packs to restore access.
现在,我真的不知道如何解决这个问题。我正在使用 GitHub 与其他人共享主要代码,但实验不需要在那里。所以,我的想法是将存储库一分为二。一份包含主要代码(无 git-lfs),一份包含实验和报告。后一个不需要存储在 github 上,所以我在本地使用它应该很好。
因此,对于 github-repository,我想完全删除文件夹 experiments
和 reports
,包括它们的提交历史记录。我还想完全删除 git-lfs。另一方面,我想保留存储库其余部分的提交历史记录。
这可能吗?如果是这样,我将如何去做?我可以使用哪些工具?
或者,这种情况是不是太乱了,建议我从 b运行d-new 仓库开始?
这里的问题不是 Git LFS 或 GitHub 无法处理您的存储库。很简单,GitHub 只为 Git LFS 提供 1 GB 的免费存储空间,而您已经使用过了。如果您想存储额外的 Git LFS 数据,那么您需要支付数据包费用。
在 Windows 上,Git 本身有一个限制,阻止它使用正常的涂抹和清洁机制在树中正确创建 Git LFS 文件,但是有解决方案,这在非 Windows 系统上不是问题。 Git LFS 可以很好地处理这个问题,一旦 Git 本身得到修复,这个问题就会自动消失。
但是,一般来说,Git 存储库不适合存储代码输出,例如二进制工件,有或没有 Git LFS。所以您可能根本不应该将 PDF 输出存储在存储库中。将它存储在别处,例如工件服务器或云存储桶,是一个更好的主意。
您不能既删除 Git LFS 又不重写提交历史。从存储库中添加或删除 Git LFS 以获取历史更改需要重写存储库,因为 Git LFS 将大文件替换为引用相关对象的小指针文件。 Git LFS 提供 git lfs migrate import
和 git lfs migrate export
来重写该历史记录,如果您想添加或删除 Git LFS。
如果您想重写历史以完全删除这些目录,那么您将需要像 git filter-repo
这样的工具(这是一个外部工具)。如果您所有的 Git LFS 文件都存储在这些目录中,那么重写历史也会从您的存储库中删除 Git LFS。
我有一个 git 存储库,其结构如下
+ LICENSE
+ README.md
+ experiments
+ ... (large csv files stored with git-lfs)
+ reports
+ ... (pdf files stored with git-lfs)
+ demos
+ ... (small example scripts)
+ src
+ ... (main codebase)
+ tests
+ ... (unit tests)
我的工作涉及 运行 实验,我使用 git-lfs 来存储实验结果,包括数据(csv 文件)和结果(主要是 pdf 格式的数据图,pdf-演示文稿)。
最近,我 运行 进行了更大的实验,并将一个大小为几千兆字节的 csv 文件添加到 git-lfs。官方的git-lfs实现是没有文件大小限制的,所以我觉得把这个存到git里应该没问题。然而,我确实将大型 csv 拆分为多个小型 csv,因为我听说一些 git-lfs 实现在文件 > 3GB 时存在问题。
无论如何,添加这个大文件是一个可怕的错误。提交所有内容后,我尝试将更改推送到 GitHub 并收到以下错误消息。
batch response: This repository is over its data quota. Account responsible for LFS bandwidth should purchase more data packs to restore access.
现在,我真的不知道如何解决这个问题。我正在使用 GitHub 与其他人共享主要代码,但实验不需要在那里。所以,我的想法是将存储库一分为二。一份包含主要代码(无 git-lfs),一份包含实验和报告。后一个不需要存储在 github 上,所以我在本地使用它应该很好。
因此,对于 github-repository,我想完全删除文件夹 experiments
和 reports
,包括它们的提交历史记录。我还想完全删除 git-lfs。另一方面,我想保留存储库其余部分的提交历史记录。
这可能吗?如果是这样,我将如何去做?我可以使用哪些工具?
或者,这种情况是不是太乱了,建议我从 b运行d-new 仓库开始?
这里的问题不是 Git LFS 或 GitHub 无法处理您的存储库。很简单,GitHub 只为 Git LFS 提供 1 GB 的免费存储空间,而您已经使用过了。如果您想存储额外的 Git LFS 数据,那么您需要支付数据包费用。
在 Windows 上,Git 本身有一个限制,阻止它使用正常的涂抹和清洁机制在树中正确创建 Git LFS 文件,但是有解决方案,这在非 Windows 系统上不是问题。 Git LFS 可以很好地处理这个问题,一旦 Git 本身得到修复,这个问题就会自动消失。
但是,一般来说,Git 存储库不适合存储代码输出,例如二进制工件,有或没有 Git LFS。所以您可能根本不应该将 PDF 输出存储在存储库中。将它存储在别处,例如工件服务器或云存储桶,是一个更好的主意。
您不能既删除 Git LFS 又不重写提交历史。从存储库中添加或删除 Git LFS 以获取历史更改需要重写存储库,因为 Git LFS 将大文件替换为引用相关对象的小指针文件。 Git LFS 提供 git lfs migrate import
和 git lfs migrate export
来重写该历史记录,如果您想添加或删除 Git LFS。
如果您想重写历史以完全删除这些目录,那么您将需要像 git filter-repo
这样的工具(这是一个外部工具)。如果您所有的 Git LFS 文件都存储在这些目录中,那么重写历史也会从您的存储库中删除 Git LFS。