linux - 如何缩小.git折叠

我目前的基数总大约是。200MB。

但我的.git文件夹有5GB(!)的惊人大小。 因为我把工作推到外部服务器上,所以我不需要任何大的本地历史......

如何缩小.git文件夹以释放笔记本上的一些空间? 我可以删除超过30天的所有更改吗?

非常感谢任何帮助:)

JMW asked 2019-08-12T04:09:49Z
5个解决方案
75 votes

你不应该删除超过30天的所有更改(我认为它可能以某种方式利用git,但实际上不推荐)。

您可以致电git gc --aggressive --prune,它将在您的存储库中执行垃圾收集并修剪旧对象。 你有很多经常改变的二进制文件(档案,图像,可执行文件)吗? 那些通常导致巨大的.git文件夹(记住,git存储每个修订版本的快照和二进制文件压缩很严重)

knittl answered 2019-08-12T04:10:07Z
47 votes

以下是git Linus的创建者关于如何缩小git repo的内容:

相当于" git gc --aggressive" - 但是*正确* - 是   做(过夜)之类的事情

   git repack -a -d --depth=250 --window=250

深度的东西只是三角洲链的深度   (让他们的历史更久 - 它值得腾出空间),以及   窗口的事情是关于我们想要每个delta的对象窗口有多大   候选人扫描。

在这里,你可能想要添加" -f" flag(这是"全部丢弃   老三角洲",因为你现在正在努力确保这一个   实际上找到好的候选人

来源:[http://gcc.gnu.org/ml/gcc/2007-12/msg00165.html]

这会消除我的回购中孤立的二进制数据吗? " git repack" 不会把您已经检查过的图像或二进制数据删除,然后将其删除。 要从您的仓库中永久删除这类数据,您必须重新编写历史记录。 一个常见的例子就是你不小心在git中检查你的密码。 您可以返回并删除一些文件,但之后您必须重新编写您的历史记录,然后强制将新的repo推送到您的原点。

David Dehghan answered 2019-08-12T04:11:16Z
17 votes

我试过这些,但我的存储库仍然很大。 问题是我不小心检查了一些生成的大文件。 经过一番搜索,我发现了一个很棒的教程,可以很容易地删除大量生成的文件。 本教程允许我将我的存储库从60 MB缩小到< 1 MB。

[http://stevelorek.com/how-to-shrink-a-git-repository.html]

Chris Hinshaw answered 2019-08-12T04:11:49Z
8 votes

5GB对200MB有点奇怪。 试试运行.git

但不,除非您将存储库拆分为模块,否则无法减小.git目录的大小。

git repo的每个克隆都是一个完整的存储库,可以充当服务器。 这是分布式版本控制的基本原则。

Let_Me_Be answered 2019-08-12T04:12:29Z
2 votes

我使用git作为同步机制而不是版本历史。 所以我对这个问题的解决方法是确保我所有当前的源都处于令人满意的状态,然后删除.git并重新初始化repos。 磁盘空间问题解决了。 :-)历史不见了:-(我这样做是因为我的回购是在一个小USB密钥上。 我不想要或不需要我的整个历史。如果我有一个只是截断历史的方法,我会用它。

如果我有兴趣保留我的历史记录,我会归档当前的存储库。稍后我可以克隆原始存储库,复制所有更改新的回购(让我们假设我没有做任何(任何)重命名或删除)。 然后做一个大提交,它将新repo中所做的所有更改表示为单个提交老回购。 是否有可能合并历史? 也许如果我使用分支然后删除了我不需要的对象。 (我不太了解git internals就像这样开始愚弄)。

Darrel Lee answered 2019-08-12T04:13:03Z
translate from https://stackoverflow.com:/questions/5613345/how-to-shrink-the-git-folder