我目前的基地总规模约为 200MB。
但是我的.git文件夹的大小却惊人的5GB(!)。由于我将工作推送到外部服务器,因此不需要任何重要的本地历史记录...
如何缩小.git文件夹以释放笔记本上的一些空间?我可以删除所有早于30天的更改吗?
非常感谢您的帮助:)
我目前的基地总规模约为 200MB。
但是我的.git文件夹的大小却惊人的5GB(!)。由于我将工作推送到外部服务器,因此不需要任何重要的本地历史记录...
如何缩小.git文件夹以释放笔记本上的一些空间?我可以删除所有早于30天的更改吗?
非常感谢您的帮助:)
Answers:
您不应该删除所有超过30天的更改(我认为使用git是有可能的,但实际上不建议这样做)。
您可以调用git gc --aggressive --prune,这将在存储库中执行垃圾回收并修剪旧对象。您是否有很多经常更改的二进制文件(存档,图像,可执行文件)?这些通常会导致巨大的.git文件夹(请记住,git为每个修订版存储快照,二进制文件压缩严重)
git gc --aggressive被认为是不好的做法。最好使用git repack -a -d --depth=250 --window=250。
git gc --aggressive调用重新打包窗口大小为250(参见手册页),深度为250(参见源代码)。--aggressive另外添加了该-f开关,以丢弃并重做所有先前的增量操作(如链接中所述)
git gc --aggressive --prune将其减少到19MB。
--prune也不必这样做,因为它自从成为默认值以来v1.5.5-rc0(commit 25ee973,2008年3月)。
这是git Linus的创建者对如何缩小git repo的评价:
等价于“ git gc --aggressive”-但是*正确地*-是要做的(过夜)
git repack -a -d --depth=250 --window=250深度是关于增量链可以有多深(在较长的历史中使它们更长-这是值得的空间开销),而窗口是关于我们希望每个增量候选对象扫描多大的对象窗口。
在这里,您可能要添加“ -f”标志(即“删除所有旧的增量”),因为您现在实际上是在尝试确保此人确实找到了合适的人选。
来源:http://gcc.gnu.org/ml/gcc/2007-12/msg00165.html
这会摆脱掉我仓库中孤立的二进制数据吗?“ git repack”不会删除已检入存储库然后删除的图像或二进制数据。要从您的仓库中永久删除此类数据,您必须重新编写历史记录。一个常见的例子是当您不小心在git中输入密码时。您可以返回并删除一些文件,但是从那以后到现在,您必须重新编写您的历史记录,然后强制将新的回购推送到您的来源。
fatal: Out of memory, malloc failed (tried to allocate 39763130 bytes)
repack本地执行,进行提交和推送之后,收缩也会被远程化吗?
我尝试了这些,但是我的存储库仍然很大。问题是我不小心检查了一些生成的大文件。经过一番搜索,我发现了一个很棒的教程,可以轻松删除生成的大型文件。本教程使我可以将存储库从60 MB缩减到<1 MB。
与版本历史相比,我更多地使用git作为同步机制。因此,针对此问题的解决方案是确保所有当前源都处于令人满意的状态,然后删除.git并重新初始化存储库。磁盘空间问题已解决。:-)历史消失了:-(之所以这样做,是因为我的存储库位于一个小的USB闪存盘上。我不需要或不需要整个历史记录。如果我有一种仅能截断历史记录的方法,则可以使用它。
如果我有兴趣保留自己的历史记录,则可以存档当前存储库。稍后,我可以克隆原始存储库,复制新存储库中的所有更改(假设我没有做太多(任何)重命名或删除操作)。然后进行一次大提交,将新仓库中所做的所有更改表示为旧仓库中的一次提交。是否可以合并历史记录?也许如果我使用了一个分支然后删除了不需要的对象。(我对git内部没有足够的了解,无法像这样开始鬼混)。
git count-objects -v吗?