git刪除大檔案歷史記錄
在首次提交git倉庫或是平時提交git倉庫時,可能會不小心把比較大的檔案不小心提交了,導致其他人克隆版本或者更新的時候非常慢、甚至卡死;而且即便是把本地的大檔案刪除並提交了,git的歷史記錄依然存在,這麼做的理由當然是讓你能把誤刪除的檔案從某一版本恢復回來,但在前面說的情況下,這個特性是多餘的;這個特性我們無法改變,所以只能從其他途徑刪除這些誤提交的檔案。
通常這些檔案的記錄會儲存在:.git\objects\pack下,我們無法修改它,但可以通過某些清理工具進行清理。
注意:需要提前裝好官方出品的git客戶端軟體
工具
2.1下載
本次清理採用BFG Repo-Cleaner這個小工具,這個工具只是一個jar包,可以從官網下載:
2.2使用
下載下來的jar包並不需要安裝,將其放在某個目錄下,例如:
D:\work\git\目錄下
隨後在該目錄下執行git命令,把git倉庫下載到該目錄,命令如下:
git clone -b 分支號--mirror 你的git倉庫路徑\xxxx.git
完成後再本地會生成一個以xxxx.git命名的目錄。需要注意的是,該目錄並不是真正的倉庫目錄,它僅是倉庫的版本控制目錄,內容類似:
2.3標記
隨後繼續在示例目錄D:\work\git\下進行操作。
在該目錄下執行標記命令,移除不想要的檔案,以下是示例命令:
2.3.1.刪除所有大於10M的檔案
java -jar bfg-1.13.0.jar --strip-blobs-bigger-than 10M xxxx.git
2.3.2.刪除所有名為target的目錄
java -jar bfg-1.13.0.jar --delete-folders target --no-blob-protection xxxx.git
2.3.3.刪除所有以.class結尾的檔案
java -jar bfg-1.13.0.jar --delete-files .class --no-blob-protection xxxx.git
注意:最新的bfg要1.8以上jdk才能支援
2.4刪除
完成2.3的操作後,需要進入2.2步驟建立的xxxx.git目錄下,隨後執行命令清除剛才找到的檔案(實際上2.3步驟僅是找到需要刪除的檔案並標記,本步驟才是刪除),清理命令:
cd D:\work\git\xxxx.git
git reflog expire --expire=now --all&& git gc --prune=now --aggressive
最後,執行push命令即可:
git push