我有一个具有以下结构的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-file)和结果(主要是pdf格式的数据图,pdf-演示)。
最近,我运行了一个更大的实验,并在git中添加了一个具有几千兆字节大小的csv文件。官方的git实现没有文件大小限制,所以我认为将其存储在git中是没有问题的。不过,我确实将大型csv拆分为多个小csv,因为我听说一些git实现存在文件> 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存储库,我想完全删除文件夹experiments
和reports
,包括它们的提交历史。我也想完全删除git-lfs。另一方面,我想为存储库的其他部分保存提交历史。
这可能吗?如果是这样的话,我会怎么做呢?我能用哪种工具?
或者,这种情况是不是太糟糕了,我最好从一个全新的存储库开始呢?
发布于 2021-06-18 19:52:31
这里的问题不是Git或GitHub不能处理您的存储库。简单地说,GitHub只为Git提供了1GB的免费存储,而且您已经使用过了。如果您想要存储更多的Git数据,那么您需要支付一个数据包的费用。
在Windows上,Git本身有一个限制,阻止它使用正常的污点和清洁机制来正确地在树中创建Git LFS文件,但是有解决方案,这在非Windows系统上是没有问题的。Git处理这个问题,一旦Git本身被修复,这个问题就会自动消失。
但是,通常情况下,Git存储库不适合存储代码的输出,比如二进制构件,不管是否有Git LFS。因此,您可能根本不应该将PDF输出存储在存储库中。将其存储在其他地方(例如在工件服务器或云桶上)是一个更好的主意。
您不能同时删除Git和不重写提交历史记录。为历史更改从存储库中添加或删除Git LFS需要重写存储库,因为Git LFS用引用所涉对象的小指针文件替换大型文件。如果要添加或删除Git,则Git提供git lfs migrate import
和git lfs migrate export
重写历史记录。
如果您想重写历史记录以完全删除这些目录,那么您将需要一个像git filter-repo
这样的工具(它是一个外部工具)。如果所有的Git文件都存储在这些目录中,那么重写历史记录也会从存储库中删除Git。
https://stackoverflow.com/questions/68036070
复制相似问题