2015-06-20 147 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的「數據庫」中,並且大小保持不變!

相關問題