gpt4 book ai didi

git gc --aggressive --prune=all 不会从存储库中删除大文件

转载 作者:IT王子 更新时间:2023-10-29 00:41:56 30 4
gpt4 key购买 nike

有很多关于“如何从 repo 中删除意外添加的大文件”的问题,其中许多建议使用 git gc 命令。但是,我发现它对我不起作用,而且我不知道出了什么问题。

这是我所做的:

$ git init
Initialized empty Git repository in /home/wzyboy/git/myrepo/.git/
$ echo hello >> README
$ git add README
$ git commit -a -m 'init commit'
[master (root-commit) f21783f] init commit
1 file changed, 1 insertion(+)
create mode 100644 README
$ du -sh .git
152K .git
$ cp ~/big.zip .
$ git add big.zip
$ git commit -a -m 'adding big file'
[master 3abd0a4] adding big file
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 big.zip
$ du -sh .git
77M .git
$ git log --oneline
3abd0a4 adding big file
f21783f init commit
$ git reset --hard f21783f
HEAD is now at f21783f init commit
$ git log --oneline
f21783f init commit
$ git gc --aggressive --prune=all
Counting objects: 6, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (6/6), done.
Total 6 (delta 0), reused 0 (delta 0)
$ git gc --aggressive --prune=now
Counting objects: 6, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (6/6), done.
Total 6 (delta 0), reused 6 (delta 0)
$ du -sh .git
77M .git
$ git version
git version 2.2.2

在上面的控制台输出中,我创建了一个新的 git 存储库,添加了一个小文本文件,.git 目录的大小为 152K,目前一切顺利。然后我在 repo 中添加了一个大文件,目录膨胀到 77M。但是,在我尝试删除大文件(git reset --hardgit rebase -i)之后,我无法恢复大文件占用的磁盘空间,不无论我如何使用不同的选项运行 git gc

谁能告诉我为什么 git gc 在我的情况下不起作用?我应该怎么做才能恢复磁盘空间?是否可以使用 git gc 而不是 git filter-branch 来恢复磁盘空间?

谢谢。

最佳答案

正如 Andrew C 所建议的,在 git gc 能够回收松散对象之前,需要使 reflog 过期以取消引用对象。所以恢复被意外添加的大文件占用的磁盘空间的正确方法是:

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

这将删除所有 reflog,因此请谨慎使用。

关于git gc --aggressive --prune=all 不会从存储库中删除大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28312439/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com