git 查詢大檔案、刪除大檔案詳細步驟

狼来了發表於2024-09-14

如在使用Git過程中不小心將較大的二進位制檔案加入倉庫,那麼倉庫大小很快就會超過規定的配額,在Push的時候會報下面的錯誤:

remote: Powered by GITEE.COM [GNK-6.4]
remote: error: File: c91e5de4f55bedd0669db01036fc131ea8e516ce 380.66 MB, exceeds 100.00 MB.
remote: Use command below to see the filename:
remote: git rev-list --objects --all | grep c91e5de4f55bedd0669db01036fc131ea8e516ce
remote: Please remove the file from history and try again. (https://gitee.com/help/articles/4232)

好面程式碼中以給出了 c91e5de4f55bedd0669db01036fc131ea8e516ce ,可以透過以下命名知道是哪個檔案超過限制大小

git rev-list --objects --all | grep c91e5de4f55bedd0669db01036fc131ea8e516ce

執行命令後會獲取到檔名,也可以透過下面的步驟2通一檢視已經知道的大檔案。

0cc3dfbe8eec2fa11e941c9001f3f062ec66cf3c goviewxw/鄂爾多斯市.zip

然後就可以執行刪除,強行遠端推送,清除快取就ok了,下面是詳細的步驟

1. 壓縮歷史記錄 刪除無用的物件 最佳化儲存結構 清理無效的引用  清除過期的臨時檔案
git gc
2. 查詢大檔案,"tail -20"中的20表示條數 git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -20 | awk '{print$1}')" 3. 刪除大檔案,”xxx.framework“是上一步中列出的大檔案路徑,遍歷所有的commit,刪除指定的檔案,重寫歷史commit git filter-branch --force --index-filter 'git rm -rf --cached --ignore-unmatch xxx.framework' --prune-empty --tag-name-filter cat -- --all 4. 強行遠端推送 git push origin --force --all 5. 清除快取 rm -rf .git/refs/original/ git reflog expire --expire=now --all git gc --prune=now // 檢視專案倉庫大小 git count-objects -v

相關文章