2015-06-20 133 views
1

我有一个巨大的git存储库(810mb),其中包含不应存在的大文件:位于文件夹build/java中的用于分发的完整JRE归档。Git从历史记录中删除大文件

我试图删除这些文件,所以我跑:

git filter-branch --tree-filter 'rm -rf build/java' HEAD 

我现在看到的消息:Your branch and 'origin/develop' have diverged, and have 414 and 414 different commits each, respectively. (use "git pull" to merge the remote branch into yours)

我不想跑git pull,但我推到远程前github上的仓库我想看看版本库已经缩小了。

不幸的是,我仍然认为它是810mb。

我在做什么错?我如何缩小该存储库?

TIA!

+2

我彻底推荐BFG:https://rtyley.github.io/bfg-repo-cleaner/。 –

+0

[如何从Git存储库中的提交历史中删除/删除大文件?](http://stackoverflow.com/questions/2100907/how-to-remove-delete-a-large-file-from- commit-history-in-git-repository) –

+0

@AndrewC - 不,这是在我按照你引用的问题提出的建议之后,所以这可能是后续问题,但不是重复的。请不要向下投票。 – isapir

回答

0

执行

git reflog 

要查看所有历史提交你在,你的分支的顶部,为最近30天(默认保留时间)。即使你重新分支你的分支,旧分支上的提交仍然在git的reflog历史记录中,并且这可以防止它们的父提交以及它们引用的任何文件被清除。

因此,如果某些不需要的文件仍然存在于这些归档提交的历史记录中的任何位置,这将有效地阻止git清除对不需要的文件的提交。

为了确保您已经清除从库中,您必须将这些文件:

1)删除整个引用日志历史

git reflog expire --all 

2)如果找出任何标签或部门还有其历史上的任何不需要的文件,并找出如何处理它。要么删除分支/标签,要么将其过滤掉。

3)运行git gc做垃圾回收。

这应该最终从本地git存储库中删除所有已删除的文件。

这里有一个坏消息:当你最终推动干净的分支时,很确定这并不能保证不需要的文件也会从你的github回购中删除。你所做的只是将分支中的提交推送出去。这不一定会导致远程git仓库被垃圾收集。我不熟悉github的默认配置,当涉及垃圾收集他们的回购。你将不得不调查。

1

首先,我强烈建议使用'bfg repo cleaner'从存储库中删除大文件。

其次,当您使用github上,你应该知道,你可以使用新的功能来处理某些类型的文件,这些文件可以是巨大的:git lfs

不幸的是,我仍然认为这是810mb

事实上,当您使用filter-branch时,git在前缀original下创建一个保存的所有更新的引用。 直到你没有通过删除这些引用来接受你的修改并完成了一个垃圾回收,所有的对象仍然在git的“数据库”中,并且大小保持不变!