为什么git不会进一步减少存储库大小?

时间:2014-12-15 17:35:33

标签: git garbage-collection

我有一个只有一个提交的存储库,其签出大小为95M。但是,我无法获得低于213M的.git文件夹大小。但是,如果我创建一个具有相同文件内容的新存储库,我会得到一个只有38M的.git文件夹。

有没有办法git重建它的对象,以便在创建新存储库时使图形更符合图形?

我尝试了git gc --prune=now --aggressivegit repack -adf --window=250 --depth=250来减少存储库大小。他们将存储库从最初的220M中删除。

我想git必须在某个地方保留一个可以防止垃圾收集的引用,但我不知道它们会在哪里。我删除了所有的遥控器和分支机构,除了'refs'

下我目前的分支机构之外,我什么都没看到
$ ls -R .git/refs
.git/refs/:
heads  tags

.git/refs/heads:
master

.git/refs/tags:

我从具有较长历史记录的现有存储库中创建了存储库。我使用checkout --orphan创建了一个新的无基础分支,然后提交了一个使用存储库状态创建新提交的提交。然后我在运行gc之前删除了原始分支并删除了遥控器。

$ git --version
git version 1.9.4.msysgit.0

1 个答案:

答案 0 :(得分:5)

运行:

git reflog expire --all --expire=now
git gc --prune=now --aggressive

将文件夹降至27M。感谢@torek建议清理reflog的评论!

我原以为reflog不是问题,因为如果我运行git reflog我只看到一个条目,我的单个提交。为了回应@ torek的建议,我找到How to remove unused objects from a git repository?,这是我找到清除reflog的命令。