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

vos*_*d01 6 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:
Run Code Online (Sandbox Code Playgroud)

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

$ git --version
git version 1.9.4.msysgit.0
Run Code Online (Sandbox Code Playgroud)

vos*_*d01 6

运行:

git reflog expire --all --expire=now
git gc --prune=now --aggressive
Run Code Online (Sandbox Code Playgroud)

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

我原以为reflog不是问题,因为如果我跑了,git reflog我只看到一个条目,我的单一提交.为了回应@ torek的建议,我找到了如何从git存储库中删除未使用的对象?这是我找到清除reflog的命令的地方.