本文介紹程式碼程式庫容量限制,如何清理程式碼程式庫容量,以及程式碼程式庫的大檔案(二進位檔案)如何管理和清理。
程式碼程式庫儲存空間容量是否有限制?
組織程式碼程式庫數量不限,預設單個程式碼程式庫20GiB空間,包括20GiB Git容量和自由的LFS空間(LFS單庫不受限,以總容量為限,超額可通過隨用隨付擴充)。
什麼是大檔案儲存體Git LFS容量?詳情請參見Codeup Git LFS 功能簡介。
隨用隨付參見隨用隨付規則。
如何清理程式碼程式庫容量?
為了保證平台資源不被惡意濫用,同時保障每位使用者流暢的使用體驗,推薦單個程式碼程式庫的 Git 資料保持在5GB以內,二進位大檔案請使用 Git LFS 大檔案儲存體管理。
單個程式碼程式庫容量即將到達推薦閾值時,需要自行進行容量清理,強烈建議二進位檔案切換為LFS儲存,提升代碼推拉速度,切換後不影響日常使用流程。
容量未達上限
當容量達到儲存限額的90%時,針對本地推送行為平台將發起提醒,建議開發人員及時進行倉庫容量清理,當容量超過上限後將禁止寫操作,屆時將無法刪除檔案:
檔案清理:作為開發人員,請及時刪除不需要的檔案,釋放倉庫容量。
GC清理:作為程式碼程式庫管理員,進入目標程式碼程式庫,選擇,可以在程式碼程式庫接近儲存限制時使用庫GC功能,壓縮儲存機制物件,減少磁碟佔用,提升讀寫倉庫的效率。

LFS空間清理:使用LFS管理二進位檔案,當刪除Git源檔案時,LFS資源檔不會連帶刪除,仍然佔用LFS儲存空間,需要手動對LFS資源檔進行清理。庫管理員進入目標程式碼程式庫,選擇,勾選期望刪除的檔案後進行刪除:

通過以下命令,可查看當前倉庫正在關聯的LFS資源檔,然後根據實際需要,按需刪除此列表外的LFS資源檔。
git lfs ls-files容量已達上限
當達到推薦容量上限後,平台將暫時鎖定倉庫的寫操作許可權,此時僅允許在庫設定中進行庫容量GC最佳化。
程式碼程式庫中 Git 大檔案如何清理?
如果在程式碼程式庫中提交了大量的二進位檔案,可能導致程式碼程式庫容量超出限制而無法寫入,或者單個檔案過大,超出單檔案大小限制而無法寫入。
此時建議對已提交程式碼程式庫的歷史大檔案進行清理,然後將大檔案使用Git-LFS進行儲存管理,Git大檔案轉LFS管理,請參見LFS 遷移指南。
資料備份
清理操作會改寫程式碼程式庫提交歷史,清除歷史的大檔案,建議將遠程程式碼程式庫複製下來,先在本地進行備份。
工具安裝
清理倉庫大檔案需要修改倉庫的提交歷史,git-filter-repo是Git官方社區推薦的修改倉庫提交歷史的工具,本文介紹使用git-filter-repo來清理倉庫大檔案的方法。
直接使用下述命令安裝:
pip3 install git-filter-repo複製裸庫
從Codeup上複製待處理的程式碼程式庫裸庫,以HTTP協議為例:
git clone --mirror --bare HTTPs://codeup.aliyun.com/example/example.git清理大檔案
進入複製好的裸庫中:
cd example.gitgit-filter-repo支援三種方式的大檔案清理:按照檔案大小、路徑或者按照檔案blob ID,具體可以參考官方使用說明,以下通過樣本詳細說明其使用方法:
按檔案大小清理
假如要清理大於100M的檔案,執行下述命令:
git filter-repo --strip-blobs-bigger-than 100M--strip-blobs-bigger-than 參數支援K、M和G三種單位,比如這裡的100M也可以換成10K,1G等。
按檔案路徑清理
假如已知大檔案的路徑,可以通過組合--path和--invert-paths參數來清理相關的檔案。例如,要從倉庫的提交歷史中刪除path/of/large/file.lib 檔案和bin/目錄,可以執行下述命令:
git filter-repo --path path/of/large/file.lib --path /bin/ --invert-paths這兩個參數組合起來可保留除了--path指定的目錄/檔案外的其他所有檔案/目錄,即從倉庫歷史提交中清除--path指定的所有目錄/檔案。
按檔案blob ID清理
假如已知大檔案的blob ID,可以將大檔案的blob ID寫入一個檔案中,比如在檔案ids.txt中寫入下述幾個大檔案blob ID:
e152814d14939a20f5399acf80b606ad018f872a
b747204ba81985a3f41314ef55d4c4a24868ede2然後執行:
git filter-repo --strip-blobs-with-ids ids.txt更新服務端倉庫
首先更新example.git倉庫配置,在example.git中執行下述命令:
git config remote.origin.mirror false使用本地去除大檔案後的倉庫強制更新遠程倉庫:
git push -u origin refs/heads/*:refs/heads/* -f
git push -u origin refs/tags/*:refs/tags/* -f查看遠端更新效果
在 Codeup 頁面上確認對應程式碼程式庫的相關大檔案已經從各個分支的提交歷史中被清除。
倉庫立即清理
執行完上述操作後,由於清理存在等待周期,服務端倉庫大小此時可能並沒有明顯變化。
如需立即生效,需要倉庫管理員在倉庫的設定中,單擊立即清理,並選擇立即刪除,執行完清理操作後相關大檔案將從服務端倉庫中徹底清除。

更多情境的大檔案清理方法
通過Agit-Flow推送評審模式提交代碼,原提交可能也攜帶了大檔案,其清理方式參見如何清理Agit集中式評審引入的大檔案空間?