在非常巨大的存储库和有限的资源中压缩所有超过 1 年的提交

问题描述 投票:0回答:2

我有一个已有 4 年历史的 git 存储库,它开始变得非常庞大:~30GO,60.000 个文件。每天完成一两次提交。我想将所有超过 1 年的提交压缩到第一次提交中。但由于技术问题,我不能只是重新创建存储库,我必须使用它。可用的 git 版本是 1.7.2.5(无法更新)。磁盘空间限制为 100go(因此只有 70go 仍然可用),设备内存为 4go(19mo 交换,是的 MO...),也不可能将存储库移动到另一台计算机上。

我尝试了本页上选定的解决方案压缩 Git 中的前两次提交?,2009 年 2 月的版本。它一直有效,直到“git rebase --onto”为止。 git-rebase 导致 OutOfMemory 错误,我不确定原因,我认为这可能是因为它尝试在一次中播放每个提交。我正在考虑使用 git-cherry-pick 并一次播放每个提交,然后将 master 移到其顶部。

这是个好主意吗?或者有人有更好的主意吗?谢谢! :)

git git-rebase git-rewrite-history squash
2个回答
0
投票

在执行此操作之前,请确保了解 git 功能 git 是 (key, value) 存储,所有 SHA1 哈希都是二进制形式的键和值,存储在

.git/object

您可以看到

.git
文件夹,用于在此文件夹中查找大文件,但 git 功能之一是清理和优化与
git gc
命令一起使用的存储库

如果您在执行任何操作之前有大存储库,请运行此命令以使用此命令查找大文件:

git rev-list --objects --all | git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' | sed -n 's/^blob //p' | sort --numeric-sort --key=2 | cut -c 1-12,41- | $(command -v gnumfmt || echo numfmt) --field=2 --to=iec-i --suffix=B --padding=7 --round=nearest 

在 git 中,如果您在 git 中提交大文件并删除它,我们绝不会错过任何内容,该文件将保留在 git 历史记录中(在对象文件夹中),

git gc
工作之一是逐步删除不必要的文件 你可以使用

git gc

git gc --aggressive

git prune

优化空间


-1
投票

提交数量不太可能导致问题,git 在压缩文本文件方面非常有效。

减少 git 存储库大小的最佳方法是使用 BFG repo Cleaner 等工具从历史记录中删除大型二进制文件。

Nuget 包和 Jars 等已编译的依赖项应主要存储在 Artefact 存储库(而不是 git)中,应用程序构建过程将在构建时获取依赖项。

您还可以使用 Git LFS 以更透明的方式存储二进制文件。

© www.soinside.com 2019 - 2024. All rights reserved.