2013-06-27 98 views
0

我试图从我的git repo历史记录中完全删除一些非常大的文件。我已经尝试了几乎所有我见过的解决方案,但我永远无法使大型文件对象“无法访问”,因此它们将被垃圾收集。这里是什么,我已经尝试了破败:试图在git中删除大文件 - 无法删除rev-list参考

# finding the largest file 
$ git verify-pack -v .git/objects/pack/pack-*.idx | sort -k 3 -n | tail -1 
3d975c0908cde6010cbfcd0424eaf74c9dcf9f13 blob 1314240900 19175430 50462430 

    # which file? 
$ git rev-list --objects --all | grep 3d975c09 
3d975c0908cde6010cbfcd0424eaf74c9dcf9f13 rawdata/brownfields/GEODATA_Featureclass_MAR2013.dbf 

$ git filter-branch -f --tree-filter 'git rm -fr --cached --ignore-unmatch rawdata' 
$ git reflog expire --expire=now --verbose --all 
$ git gc --aggressive --prune=now 
$ git prune --expire now 

$ git rev-list --objects --all | grep 3d975c09 
3d975c0908cde6010cbfcd0424eaf74c9dcf9f13 rawdata/brownfields/GEODATA_Featureclass_MAR2013.dbf 

我相当确信该文件已经被消灭从历史干净,除了在REV-列表这个讨厌的参考,这是不是让它被垃圾收集。

如果它显示在rev-list中,这个对象永远不会被删除吗?如果是这样,我如何从rev-list中删除它的引用?我已经尝试过这么多的命令,以各种不同的排列方式无济于事。任何有识之士将不胜感激。

+1

使用'REV-list'你正在寻找所有分支机构,但你只有在当前分支运行'过滤branch'。你确定这个文件在哪个分支上? –

+1

远程分支和标签怎么样? 'git分支-r'和'git rag'? –

+0

啊哈!这是一个标签。 [这个答案](http://stackoverflow.com/questions/7672907/why-has-git-filter-branch-not-rewritten-tags)解决了它 – maackle

回答

0

事实证明,我有一个旧的标签仍然参考大文件,并没有意识到filter-branch不能在标签上操作。 This answer使我朝着正确的方向前进。

总之,我需要添加--tag-name-filter [tag]选项filter-branch