国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > 綜合 > 正文

Git如何刪除歷史記錄中的大文件詳解

2024-07-21 02:03:03
字體:
來源:轉載
供稿:網友

前言

Git 作為一個分布式的版本管理工具,代碼倉庫中是會保存所有歷史記錄的。雖然,Git 的 .gitignore 文件里可以定義一些忽略文件的規(guī)則,但是,在我們提交代碼的過程中,總會不小心誤提一些沒用的文件,如果文件中存在大文件,就會導致:就算我們把它刪了重新提交,.git 文件夾依然會占用較大的空間。

如何解決這個問題呢?其實,Git 已經為我們提供了解決方案,就是被稱為核彈級的命令 filter-branch。這個命令可以用來修改歷史提交記錄,把不需要的文件永久地從歷史記錄中刪除。

方法如下:

首先,我們需要找出大文件。

找出排名前 5 的 pack 記錄:

git verify-pack -v .git/objects/pack/pack-*.idx | sort -k 3 -g | tail -5

可以看到這樣的信息:

1753e0b6aa1cd3ed27d1d14e8e569664c685e896 blob 44600 43841 37970ca12c545eae19d688ac840c7f0e2e623a1a4192b blob 45262 8534 1404487a3265ee94c0ab25cf079ac8ccdf87f41d455d42 blob 54708 49093 17130772590cee1315e32dada25535184dcee97c6f5af9 blob 1114323 1104823 1138876124cc1f9dcef1004355d2a595d45808e99f100dc4d blob 114592569 113703558 184054

最后一條就是最大的一條記錄,4cc1f9dcef1004355d2a595d45808e99f100dc4d 是它的 id。
找出該記錄對應的文件:

git rev-list --objects --all | grep 4cc1f9dcef1004355d2a595d45808e99f100dc4d

可以看到:

4cc1f9dcef1004355d2a595d45808e99f100dc4d app/src/main/assets/Android群英傳.pdf

這個文件就是罪魁禍首,它占了有 100 多 M 的空間。

將該文件從歷史記錄中移除:

git log --pretty=oneline --branches -- app/src/main/assets/Android群英傳.pdf

重寫所有 commit,將該文件從 Git 歷史中完全移除:

git filter-branch --index-filter 'git rm --cached --ignore-unmatch app/src/main/assets/Android群英傳.pdf' -- --all

到這里,歷史記錄中已經沒有該文件了。不過運行 filter-branch 產生的日志還是會對該文件有引用,所以還需要運行以下幾條命令,把該文件的引用完全刪除:

rm -Rf .git/refs/originalrm -Rf .git/logs/git gcgit prune

這個時候,再看文件夾,已經小了很多了。然后就可以 push 代碼了,不過就是需要強制 push:

git push --force

以上就是刪除 Git 歷史記錄中大文件的過程。

當然 filter-branch 的作用還不止這些,比如它還可以用來修改歷史提交記錄中的用戶名(username)和郵箱(email)等。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對武林網的支持。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 涟水县| 高碑店市| 娱乐| 防城港市| 漳浦县| 綦江县| 天峻县| 博白县| 饶阳县| 怀柔区| 肇东市| 寿宁县| 团风县| 嘉鱼县| 喀喇沁旗| 呼伦贝尔市| 辽宁省| 绥中县| 六盘水市| 泗洪县| 滨海县| 东城区| 齐齐哈尔市| 南城县| 仙居县| 手机| 靖江市| 亳州市| 新宁县| 肃宁县| 长兴县| 仁寿县| 石门县| 老河口市| 剑川县| 上饶县| 通山县| 田林县| 清新县| 安龙县| 常德市|