1. 程式人生 > >git刪除大檔案歷史記錄

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

說明

Bfg的詳細使用可以參考官網說明:https://rtyley.github.io/bfg-repo-cleaner/。官網首頁有簡單的示例介紹。