0. Intro
網(wǎng)上能搜到的資料大部分都是 git filter-branch,不僅速度慢,還容易出問(wèn)題,而且官方都在使用git filter-branch時(shí)推薦git filter-repo,因此嘗試一下官方推薦的方法
1. 安裝git-filter-repo
這里選擇通過(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