为什么Git不会进一步减小代码库的大小?

9
我有一个仓库,只有一个提交记录,检出大小为95M。 但我无法将.git文件夹的大小降至213M以下。 但是,如果我使用相同的文件内容创建新的仓库,则会得到一个只有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

2
清理reflogs,那可能是隐藏问题的地方。 - torek
可能是减小Git仓库大小的重复问题。 - Andrew C
@AndrewC 这就是我尝试使用的内容,也是我得到上面gc命令的地方,但当时它没有提到reflog。 - vossad01
1
我在标记后意识到这是一个循环引用。哎呀。你会认为它应该出现在某个地方,但堆栈溢出搜索太糟糕了。 - Andrew C
不用担心。这件事的好处是,对于那个问题的答案现在已经更新了,这应该可以避免更多人遇到同样的问题。 - vossad01
1个回答

10

运行中:

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

我将文件夹大小降至27M。感谢@torek的评论,建议清理reflog!
我曾认为reflog不是问题,因为如果我运行git reflog,我只能看到一个条目,即我的单个提交。在回应@torek的建议时,我找到了如何从git存储库中删除未使用的对象?,这就是我找到用于清除reflog的命令的地方。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接