刪除git中無用的大文件


推薦閱讀:為什么你的 Git 倉庫變得如此臃腫

有時候我們不小心提交了一些大文件上去,后來刪除了,但是已經於事無補了,整個git的提及已經蹭蹭上去了。

這個時候怎么辦呢?

1. 查看有哪些大文件(top 5)

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

2. git filter-branch

git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch 文件名' --prune-empty --tag-name-filter cat -- --all

git filter-branch --index-filter每個提交的文件都復制到索引(.git/index)中

然后運行過濾器命令:git rm --cached --ignore-unmatch 文件名 ,讓每個提交都刪除掉“文件名”文件

然后--prune-empty 把空的提交“修剪”掉

然后--tag-name-filter cat 把每個tag保持原名字,指向修改后的對應提交

最后-- --all 將所有ref(包括branch、tag)都執行上面的重寫

3. 刪除緩存下來的ref和git操作記錄

git for-each-ref --format='delete %(refname)' refs/original | git update-ref --stdin
git reflog expire --expire=now --all

4. 垃圾回收

上面2步把大文件的索引都切斷了,這個時候進行垃圾回收,就可以很明顯看到效果了

git gc --prune=now

5. 把.git里面的修改推上去

這個時候普通的push是不行的,需要強推

git push --force

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM