git:找不到blob - 想从包中删除它 [英] git: can't find blob - want to get rid of it from pack

查看:321
本文介绍了git:找不到blob - 想从包中删除它的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一大块我想摆脱的!
我以为我使用这个解决方案删除了​​文件:
http://dound.com/2009/04/git-forever-remove-files-or-folders-from-history/
(我用过 - --all 而不是 HEAD 以便从所有分支中删除文件)

  rm -rf .git / refs / original /&& git reflog expire --all&& 
git gc --aggressive --prune

我已经在包文件夹中查找这为为什么我的git仓库如此之大?

  $ git verify-pack -v .git / objects / pack / pack  -  *。idx |排序-k3n 
......最后4行:
bc7ae9801052180b283cd81880753549f0f92587 BLOB 19464809 749446 305054873
acd5f09a35846bec25ebc324738139e5caabc50f BLOB 294278199 71381636 39607483
986d152935434b56cf182d8a32e24cb57af75ac3 BLOB 480385718 108184804 110989119
ba9d1d27ee64154146b37dfaf42ededecea847e1 BLOB 761172819 27430741 277589990

脚本 git-find-blob 是来自哪个提交有这个blob?

  $ ./git-find-blob ba9d1d27ee64154146b37dfaf42ededecea847e1 

但它没有找到任何东西。



任何想法如何从我的存储库中删除它?

git repack -Ad 来强制git重建您的包,并将任何不可访问的对象解包为松散对象。此时,您可以使用 git gc --prune = now 来放弃无法访问的对象。



您还应该仔细检查你是否真的过期了你的推荐日志。我相信 git reflog expire --all 将默认为90天(或30个用于不可访问的对象),因此您可能需要使用 git reflog expire - -expire-unreachable = now --all 改为(这需要在重新包装+ gc之前完成)。


I've a large blob that I want to get rid of! I thought I removed the file using this solution: http://dound.com/2009/04/git-forever-remove-files-or-folders-from-history/ (I've used -- --all instead of HEAD so that files are removed from all branches)

rm -rf .git/refs/original/ && git reflog expire --all &&  
    git gc --aggressive --prune

I've looked in the pack folder via this Why is my git repository so big?

$ git verify-pack -v .git/objects/pack/pack-*.idx | sort -k3n
... last 4 lines:
bc7ae9801052180b283cd81880753549f0f92587 blob   19464809 749446 305054873
acd5f09a35846bec25ebc324738139e5caabc50f blob   294278199 71381636 39607483
986d152935434b56cf182d8a32e24cb57af75ac3 blob   480385718 108184804 110989119
ba9d1d27ee64154146b37dfaf42ededecea847e1 blob   761172819 27430741 277589990

The script git-find-blob is taken from Which commit has this blob?

$ ./git-find-blob ba9d1d27ee64154146b37dfaf42ededecea847e1

But it doesn't find anything.

Any ideas how to get rid of it from my repository?

解决方案

You can use git repack -Ad to force git to reconstruct your packs, and to unpack any unreachable objects into loose objects. At this point you can use git gc --prune=now to discard the unreachable objects.

You should also double-check that you actually expired your reflogs. I believe git reflog expire --all will default to 90 days (or 30 for unreachable objects), so you may want to use git reflog expire --expire-unreachable=now --all instead (this needs to be done before the repack+gc).

这篇关于git:找不到blob - 想从包中删除它的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆