git目錄檔案過大

2022-08-20 21:30:14 字數 3083 閱讀 7811

最近clone乙個倉庫發現資料夾巨大,檢視具體檔案體積並不大

後來發現是.git目錄占用過多空間

git 往磁碟儲存物件時預設使用的格式叫鬆散物件 (loose object) 格式

git 時不時地將這些物件打包至乙個叫 packfile 的二進位制檔案以節省空間並提高效率

而git verify-pack 命令就是用於顯示已打包的內容

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

sort命令中 -k 指定排序參照列, -n 依照數值的大小排序

tail命令 指定輸出項數

git rev-list 按照預設反向時間順序,輸出命令指定的commit objects

--objects 列出的提交引用的任何物件的物件id

--all 全部匹配結果

git rev-list --objects --all | grep b098d1c7

上述兩個命令可以合併成乙個

這樣的輸出效果更明顯,方便

awk 命令是處理文字檔案強大分析工具, 表示每行按空格或tab分割,輸出文字中第一項

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

git重寫歷史中,以前常用到的就是

修改上一次提交

git commit --amend
而我們這一次所需要用到的內容是,「核彈級選項」 git filter-branch

它可以修改大量的提交

--force 拒絕從現有的臨時目錄開始,強制執行改寫操作

--index-filter 與tree-filter相比,不檢查樹,和git rm搭配使用,更快的生成版本

--ignore-unmatch 如果你想「完全忘記」乙個檔案,在輸入歷史記錄時無關緊要

--prune-empty 表示如果修改後的提交為空則扔掉不要。實際可能雖然檔案被刪除了,但是還剩下個空的提交

--tag-name-filter cat 來簡單地更新標籤

--all 是針對所有的分支,注意前面多了乙個 -- 這個是為了讓分隔開git filter-branch 和 --all

crnn/trained_models_crnn_rec_done_155_1084.pth 為你要刪除的檔名

如果你想刪除整個資料夾歷史

git filter-branch --force --index-filter "git rm --cached --ignore-unmatch 'img/*'"  --prune-empty --tag-name-filter cat ----all

git for-each-ref 輸出指定位置所有reflog條目,--format 指定帶有特定字元的object

git update-ref update reflog條目

git reflog expire 刪除掉--expire時間早的reflog條目

git gc --prune=對指定日期之前的未被關聯的鬆散物件進行清理

這時候檢視磁碟占用空間

du -d 1 -h

--verbose 詳細輸出執行log

--dry-run 做"真的update遠端"以外所有工作

"真的update"

git push --force

最好的方法:不要把大檔案放在git倉庫

參考文章:

如何解決 github 提交次數過多 .git 檔案過大的問題? - 鄭宇的回答 - 知乎

尋找並刪除git記錄中的大檔案

pro git

初次使用 git 的「核彈級選項」:filter-branch

git 檔案過大 減小 git 檔案體積

最近發現github上專案.git檔案已經達到了2個g,整理了減小.git檔案的方法。乙個管理git倉庫的資料夾,這裡包含所有git操作所需要的東西 執行gc,生成pack檔案 後面的 prune now表示對之前的所有提交做修剪,有的時候僅僅gc一下.git檔案就會小很多 git gc prune...

git資料夾過大

在頻繁增刪改 commit之後,git檔案會出現過大的情況 這個時候需要徹底清理以前的歷史版本 也就是說只保留當前版本,不可能再回滾了 中心思想就是建立乙個新工程把現有 拷貝過去 建立新的工程,拷貝現有 git init建立新倉庫 git remote add origin url新增遠端倉庫位址 ...

git中刪除過大檔案

不小心把很大的exe檔案複製到了工程裡並且commit了,之後我雖然刪除了本地的檔案,但是push的時候仍然提示我檔案過大。1.使用 rev list 命令,傳入 objects 選項,它會列出所有 commit sha 值,blob sha 值及相應的檔案路徑,這樣檢視 blob 的檔名。git ...