2012-08-17 105 views
2

我有一個回購協議是(開始)爲5.6G大小:Git永久刪除文件不會導致較小的回購?

[email protected] ~/repo (master) 
$ du -d 0 -h 
5.6G . 

然而,這種回購包含了一些不再需要在回購大型二進制文件。最初他們在目錄結構中的不同位置,但都被命名爲「tc.dat」。作爲「清理」的步驟,我創建了一個cruft目錄,git mv所有的人都到這個克魯夫特目錄,改變自己的名字tc.dat1tc.dat2

然後我有這些文件的5,tc.dat1通過tc.dat5

然後我跟着this question,並使用filter-branch以及清理步驟來刪除cruft目錄中的這些文件的所有實例。但是,這仍然會在回購中留下原始文件名(在遷入cruft之前)。然後我重複步驟從原來的位置在所有提交中刪除,並重新做了清理步驟:

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

做完這一切,如果我做一個

git log --all -- tc*.dat 

我看到在沒有比賽我歷史,表明他們完全被刪除。但是,當我再次執行du時,回購的規模仍然是5.6G。鑑於這些文件包含大約0.5GB,我希望看到這個數字下降。

我錯過了什麼?

+0

會http://stackoverflow.com/questions/2116778/reduce-git-repository-size/2116892#2116892(及其提及的問題)有幫助嗎? – VonC 2012-08-17 16:56:41

回答

3

好吧,我有一些東西丟失。

Git pull error: unable to create temporary sha1 filename我嘗試一些命令,也做了提示:

$ git-prune 
$ git-prune-packed 
$ du -h -d 0 
5.2G 

這是對0.4G下來,這大約是我想要去的文件的大小。我在閱讀few other questionsgit-refloggit-gc的手冊頁時也注意到我的使用reflog expire--aggressive --prune是錯誤的。無論採取論據,如何早在歷史中去,在這兩種情況下我想所有歷史所以需要now參數:

$ rm -rf .git/refs/original/ 
$ git reflog expire --all --expire=now 
$ git gc --aggressive --prune=now 
$ du -h -d 0 
4.5G . 

一個相當顯著儲蓄(1.1G)在我開始在。