1

我在树莓派上使用私人托管的 git 存储库来存储我所有的学校作业。我这样做是为了帮助我熟悉 Git,并在一般情况下运行 linux 服务器。一切正常,直到昨晚我收到一条错误消息,内容如下:

remote: Counting objects: 2688, done.
remote: Compressing objects: 100% (1784/1784), done.
remote: fatal: Out of memory, malloc failed (tried to allocate 243315665 bytes)
error: git upload-pack: git-pack-objects died with error.rRemote: aborting due t
fatal: git upload-pack: aborting due to possible repository corruption on the re
mote side.ly EOF:  72% (1937/2688), 42.41 MiB | 293.00 KiB/s
fatal: index-pack failed

我假设这里的实际问题是服务器只是内存不足。我检查了我的 repo 的大小,它超过了 300mb。这是因为作为一个新用户,我没有意识到上传诸如 Visual Studio、Eclipse 和 Netbeans 临时用户文件之类的东西是一件坏事。我知道如何为当前和未来的提交删除这些文件 - 但我一直很难尝试从存储库中完全删除这些文件。谷歌帮助我挖掘的所有过滤器分支方法似乎只适用于几个文件。我需要批量删除许多文件,并且当它在给定目录中找不到单个文件时,我需要它不要抱怨我。

所以我的问题是,有没有一种合理的方法来做我所要求的?或者在我的情况下,只是丢失我的提交消息历史记录,并从第一天开始安全地启动所有 .gitignore 文件的新存储库会更容易吗?

4

4 回答 4

2

https://www.kernel.org/pub/software/scm/git/docs/git-filter-branch.html

第一个示例看起来与您相关。

基本上:

git filter-branch --index-filter 'git rm --cached --ignore-unmatch filename' HEAD

您可以将脚本替换为“git rm --cached --ignore-unmatch filename”,该脚本将删除您不需要的所有文件。只要它为每个结果返回“成功”,它就应该可以正常工作。

我没试过!在你弄乱它之前制作你的 repo 的备份副本(无论是这个解决方案还是任何其他解决方案)。

于 2013-11-20T05:56:26.387 回答
2

我很确定您不需要 filter-branch 来完成推送,尽管出于您已经知道的其他原因,这看起来是个好主意。有包装尺寸和压缩选项可以防止pack-objects像这样发疯。请参阅以开头的git config 文档pack.window,您需要的是各种内存和大小上限。记住包压缩是多线程的,每个核心将使用一个完整的压缩窗口。

但是对于您的过滤,BFG Repo-Cleaner可能就是您所追求的。我从未使用过它,但它似乎受到了好评。

于 2013-11-20T07:54:39.993 回答
1

使用 BFG 删除大文件,而不是 git-filter-branch ...

BFG 提供了一种摆脱大文件的万无一失的方法,比使用容易得多git filter-branch,请参阅http://rtyley.github.io/bfg-repo-cleaner/

$ bfg  --strip-blobs-bigger-than 100M  my-repo.git

或者,如果您想定位特定文件夹:

$ bfg  --delete-folders "{VisualStudio,Eclipse,NetBeans}"  my-repo.git

全面披露:我是 BFG Repo-Cleaner 的作者。

于 2013-11-20T12:31:03.820 回答
0

我解决了这个问题,但没有使用任何我想的方法。原来我应该相信错误消息,因为我的存储库实际上已损坏。我手动将我在本地所做的两个提交复制到另一台持有该 repo 的机器上,手动复制提交消息并从我的 pi 中删除损坏的 repo。然后我在 pi 上重新初始化了一个裸仓库,并将本地手动更新的仓库推送到运行良好的服务器。我现在可以毫无问题地拉和推它。从来没有内存问题,我检查了我拥有的另一个 repo 的大小,因为那里有一些高清视频,它的大小超过 800MB,运行良好。

感谢那些试图回答我的问题的人抽出时间。以及 BFG 的创建者 - 感谢您的发帖。我肯定会使用你的工具来清理我的回购,因为我让它再次工作。

于 2013-11-21T02:14:02.253 回答