.git文件過大!刪除大文件


在我們日常使用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


免責聲明!

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



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