用 git filter-repo 徹底刪除Git中的大文件

0. Intro

網(wǎng)上能搜到的資料大部分都是 git filter-branch,不僅速度慢,還容易出問(wèn)題,而且官方都在使用git filter-branch時(shí)推薦git filter-repo,因此嘗試一下官方推薦的方法

1. 安裝git-filter-repo

官方Git庫(kù)有很詳細(xì)的說(shuō)明

這里選擇通過(guò)pip安裝,windows需要手動(dòng)安裝python或者conda

pip install git-filter-repo

2. 找出要?jiǎng)h除的大文件

按照文件大小升序排列并取最后40個(gè)文件

git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -40 | awk '{print$1}')"

注意嵌套語(yǔ)句會(huì)導(dǎo)致排序錯(cuò)亂,可以拆開(kāi)逐個(gè)尋找文件

git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -40
git rev-list --objects --all | grep 文件對(duì)應(yīng)的id

3. 徹底刪除大文件

官方文檔列出了各種功能,在此就不一一展示了

由于本人不小心上傳了大量csv文件,因此使用正則匹配將所有csv文件刪除

git filter-repo --force --invert-paths --path-regex .+\.csv

4. 強(qiáng)制推送到遠(yuǎn)端

由于修改了歷史的commit,因此倉(cāng)庫(kù)無(wú)法正常推送到遠(yuǎn)端,需要進(jìn)行強(qiáng)制推送

git push -f origin master

5. 額外說(shuō)明

以上命令都是在linux下,如果使用windows系統(tǒng)的話,可以先通過(guò) conda 安裝 git-filter-repo,再通過(guò)git自帶的MINGW運(yùn)行帶有|這種cmd不兼容的命令,最后通過(guò) conda 運(yùn)行git filter-repo

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容