2016-09-19 54 views
0

我在Windows 10上使用Git以及Netbeans 8.1,同時測試Smartgit。一旦存儲庫被創建,我意外地提交了二進制文件和其他非源文件,並且存儲庫大小高達680MB! 儘管我已經創建了一個.gitignore文件,並且手動指示了NB要忽略哪些文件夾,但我無法找到恢復存儲庫中浪費空間的方法。在Windows上縮小/縮小Git存儲庫

我已閱讀這些資源,但是我沒有bash的終端上Windows和無的建議似乎幫助:

  1. Reduce git repository size
  2. How to reduce size of git repository after accidental push of large file size?
  3. how to reduce git repository size

一個重要方面是我想排除的二進制文件仍然在工作樹中(因功能原因無法刪除它們),但它們都是d被Git忽略並從回購中刪除。

我該怎麼辦?

回答

0

那麼,.gitignore只忽略位於工作樹中的某些文件;它肯定不會對已經提交的做任何事情,並因此存儲在存儲庫的對象存儲中。 換句話說,.gitignore是一種過濾器,它幫助您在研究git status的輸出時,在視覺上清除不相關的東西,並且還會使某些Git命令的「globbing」(或「通配符」)參數忽略不相關的文件,如那麼,例如,git add .將不會添加.gitignored,除非您明確告訴它考慮它們。

正如你所看到的,你的問題只能通過實際修改部分已記錄的歷史的解決:那就是,你需要重寫每一個承諾包含這些大文件,以便在新的地方提交創建原來一個沒有參考他們。之後,當刪除所有對舊的原始歷史記錄的引用時,存儲庫存儲器中保存這些文件的對象將變爲未被引用(因此被視爲垃圾),並且下一次運行git gc實際上將從存儲庫中將其加入。

處理此問題的標準方法是git filter-branch命令。 具體而言,您需要使用其--index-filter命令行選項和適當的腳本來對其進行過濾。考慮從其手冊頁的「示例」部分開始以獲得概述。

這個命令使用起來有點棘手(但是如何使用HOWTOs在互聯網上已經很豐富了),所以如果你對硬核Git命令不太瞭解,你可能會考慮一個更通用的定製工具,The BFG Repo Cleaner爲您的一次性演出。

+0

感謝您花時間解釋,這有助於我更好地理解發生了什麼! – Riccardo