容量和清理說(shuō)明
本文介紹代碼庫(kù)容量限制,如何清理代碼庫(kù)容量,以及代碼庫(kù)的大文件(二進(jìn)制文件)如何管理和清理。
代碼庫(kù)存儲(chǔ)空間容量是否有限制?
企業(yè)代碼庫(kù)數(shù)量不限,默認(rèn)單個(gè)代碼庫(kù)10GB空間,包括5GB Git容量和5GB Git LFS空間。
當(dāng)代碼庫(kù)容量滿后,企業(yè)管理者可以選擇升級(jí)企業(yè)套餐以獲取更多容量,詳情請(qǐng)參見(jiàn)云效基礎(chǔ)功能和高級(jí)版專屬功能說(shuō)明。
什么是大文件存儲(chǔ)Git LFS容量?詳情請(qǐng)參見(jiàn)Codeup Git LFS 功能簡(jiǎn)介。
如何清理代碼庫(kù)容量?
為了保證平臺(tái)資源不被惡意濫用,同時(shí)保障每位用戶流暢的使用體驗(yàn),推薦單個(gè)代碼庫(kù)的Git數(shù)據(jù)保持在5GB以內(nèi),二進(jìn)制大文件請(qǐng)使用什么是Git LFS大文件存儲(chǔ)?大文件存儲(chǔ)管理。
單個(gè)代碼庫(kù)容量即將到達(dá)推薦閾值時(shí),需要自行進(jìn)行容量清理,強(qiáng)烈建議二進(jìn)制文件切換為L(zhǎng)FS存儲(chǔ),提升代碼推拉速度,切換后不影響日常使用流程。
購(gòu)買資源包或升級(jí)高級(jí)版可獲取更多代碼庫(kù)容量:計(jì)費(fèi)說(shuō)明。
容量未達(dá)上限
為了不影響您的日常研發(fā)工作,當(dāng)容量達(dá)到存儲(chǔ)限額的90%時(shí),針對(duì)本地推送行為平臺(tái)將發(fā)起提醒,建議開(kāi)發(fā)者及時(shí)進(jìn)行倉(cāng)庫(kù)容量清理,當(dāng)容量超過(guò)上限后將禁止寫操作,屆時(shí)將無(wú)法刪除文件:
文件清理:作為開(kāi)發(fā)者,請(qǐng)及時(shí)刪除不需要的文件,釋放倉(cāng)庫(kù)容量。
GC清理:作為代碼庫(kù)管理員,進(jìn)入目標(biāo)代碼庫(kù),選擇
,可以在代碼庫(kù)接近存儲(chǔ)限制時(shí)使用庫(kù)GC功能,壓縮存儲(chǔ)庫(kù)對(duì)象,減少磁盤占用,提升讀寫倉(cāng)庫(kù)的效率。LFS空間清理:使用LFS管理二進(jìn)制文件,當(dāng)刪除Git源文件時(shí),LFS資源文件不會(huì)連帶刪除,仍然占用LFS存儲(chǔ)空間,需要手動(dòng)對(duì)LFS資源文件進(jìn)行清理。庫(kù)管理員進(jìn)入目標(biāo)代碼庫(kù),選擇
,勾選期望刪除的文件后進(jìn)行刪除:通過(guò)以下命令,可查看當(dāng)前倉(cāng)庫(kù)正在關(guān)聯(lián)的LFS資源文件,然后根據(jù)實(shí)際需要,按需刪除此列表外的LFS資源文件。
git-lfs-ls-files(1)
Show information about Git LFS files in the index and working tree.
容量已達(dá)上限
當(dāng)達(dá)到推薦容量上限后,平臺(tái)將暫時(shí)鎖定倉(cāng)庫(kù)的寫操作權(quán)限,此時(shí)僅允許在庫(kù)設(shè)置中進(jìn)行庫(kù)容量GC優(yōu)化。您可以選擇購(gòu)買資源包或升級(jí)為高級(jí)版企業(yè),對(duì)應(yīng)容量說(shuō)明參見(jiàn)計(jì)費(fèi)說(shuō)明。為了不影響日常工作,建議盡快處理:
企業(yè)管理員在企業(yè)
,確認(rèn)是否已成功購(gòu)買資源包或升級(jí)套餐:代碼庫(kù)中 Git 大文件如何清理?
如果在代碼庫(kù)中提交了大量的二進(jìn)制文件,可能導(dǎo)致代碼庫(kù)容量超出限制而無(wú)法寫入,或者單個(gè)文件過(guò)大,超出單文件大小限制而無(wú)法寫入。
此時(shí)建議對(duì)已提交代碼庫(kù)的歷史大文件進(jìn)行清理,然后將大文件使用Git-LFS進(jìn)行存儲(chǔ)管理,Git大文件轉(zhuǎn)LFS管理參見(jiàn)LFS 遷移指南。
數(shù)據(jù)備份
清理操作會(huì)改寫代碼庫(kù)提交歷史,清除歷史的大文件,建議將遠(yuǎn)程代碼庫(kù)克隆下來(lái),先在本地進(jìn)行備份。
工具安裝
清理倉(cāng)庫(kù)大文件需要修改倉(cāng)庫(kù)的提交歷史,git-filter-repo是Git官方社區(qū)推薦的修改倉(cāng)庫(kù)提交歷史的工具,本文介紹使用git-filter-repo來(lái)清理倉(cāng)庫(kù)大文件的方法。
安裝方法參考git-filter-repo,或直接使用下述命令安裝:
pip3 install git-filter-repo
克隆裸庫(kù)
從Codeup上克隆待處理的代碼庫(kù)裸庫(kù),以HTTP協(xié)議為例:
git clone --mirror --bare HTTPs://codeup.aliyun.com/example/example.git
清理大文件
進(jìn)入克隆好的裸庫(kù)中:
cd example.git
git-filter-repo支持三種方式的大文件清理:按照文件大小、路徑或者按照文件blob ID,具體可以參考官方使用說(shuō)明,以下通過(guò)示例詳細(xì)說(shuō)明其使用方法:
按文件大小清理
假如要清理大于100M的文件,執(zhí)行下述命令:
git filter-repo --strip-blobs-bigger-than 100M
--strip-blobs-bigger-than 參數(shù)支持K、M和G三種單位,比如這里的100M也可以換成10K,1G等。
按文件路徑清理
假如已知大文件的路徑,可以通過(guò)組合--path和--invert-paths參數(shù)來(lái)清理相關(guān)的文件。例如,要從倉(cāng)庫(kù)的提交歷史中刪除path/of/large/file.lib 文件和bin/目錄,可以執(zhí)行下述命令:
git filter-repo --path path/of/large/file.lib --path /bin/ --invert-paths
這兩個(gè)參數(shù)組合起來(lái)可保留除了--path指定的目錄/文件外的其他所有文件/目錄,即從倉(cāng)庫(kù)歷史提交中清除--path指定的所有目錄/文件。
按文件blob ID清理
假如已知大文件的blob ID,可以將大文件的blob ID寫入一個(gè)文件中,比如在文件ids.txt中寫入下述幾個(gè)大文件blob ID:
e152814d14939a20f5399acf80b606ad018f872a
b747204ba81985a3f41314ef55d4c4a24868ede2
然后執(zhí)行:
git filter-repo --strip-blobs-with-ids ids.txt
更新服務(wù)端倉(cāng)庫(kù)
首先更新example.git倉(cāng)庫(kù)配置,在example.git中執(zhí)行下述命令:
git config remote.origin.mirror false
使用本地去除大文件后的倉(cāng)庫(kù)強(qiáng)制更新遠(yuǎn)程倉(cāng)庫(kù):
git push -u origin refs/heads/*:refs/heads/* -f
git push -u origin refs/tags/*:refs/tags/* -f
查看遠(yuǎn)端更新效果
在 Codeup 頁(yè)面上確認(rèn)對(duì)應(yīng)代碼庫(kù)的相關(guān)大文件已經(jīng)從各個(gè)分支的提交歷史中被清除。
倉(cāng)庫(kù)立即清理
執(zhí)行完上述操作后,由于清理存在等待周期,服務(wù)端倉(cāng)庫(kù)大小此時(shí)可能并沒(méi)有明顯變化。
如需立即生效,需要倉(cāng)庫(kù)管理員在倉(cāng)庫(kù)的設(shè)置中,單擊立即清理,并選擇立即刪除,執(zhí)行完清理操作后相關(guān)大文件將從服務(wù)端倉(cāng)庫(kù)中徹底清除。
更多場(chǎng)景的大文件清理方法
通過(guò)Agit-Flow推送評(píng)審模式提交代碼,原提交可能也攜帶了大文件,其清理方式參見(jiàn)如何清理 Agit 集中式評(píng)審引入的大文件空間?