在我們日常使用Git的時候,一般比較小的項目,我們可能不會注意到.git 這個文件。
其實, .git文件主要用來記錄每次提交的變動,當我們的項目越來越大的時候,我們發現 .git文件越來越大。
很大的可能是因為提交了大文件,如果你提交了大文件,那么即使你在之后的版本中將其刪除,但是,
實際上,記錄中的大文件仍然存在。
為什么呢?仔細想一想,雖然你在后面的版本中刪除了大文件,但是Git是有版本倒退功能的吧,那么如果大文件不記錄下來,
git拿什么來給你回退呢?但是,.git文件越來越大導致的問題是: 每次拉項目都要耗費大量的時間,並且每個人都要花費
那么多的時間。。
git給出了解決方案,使用git branch-filter來遍歷git history tree, 可以永久刪除history中的大文件,達到讓.git文件瘦身的目的。
下面給出步驟(以下步驟非常危險,操作需謹慎!別把公司刪沒了哈哈)
首先找出git中前五大的文件:
git verify-pack -v .git/objects/pack/pack-*.idx | sort -k 3 -g | tail -5
執行的結果實際上是這個樣子的:
第一行的字母其實相當於文件的id,用以下命令可以找出id 對應的文件名:
git rev-list --objects --all | grep 8f10eff91bb6aa2de1f5d096ee2e1687b0eab007
好了,最大的文件找到了。怎么刪除呢?
git filter-branch --index-filter 'git rm --cached --ignore-unmatch <your-file-name>' rm -rf .git/refs/original/ git reflog expire --expire=now --all git fsck --full --unreachable git repack -A -d git gc --aggressive --prune=now git push --force [remote] master
首先,里面最重要的兩條命令是 git filter-branch 和 gc, filter-branch 真正在清理,但是只運行它也是沒用的,需要再刪除備份的文件,重新打包之類的,最后的gc命令,
用來收集產生的垃圾,最終清除大文件。
一步到位,再看看你的.git文件,有沒有大吃一驚呢!
====
轉載:https://www.cnblogs.com/lout/p/6111739.html