我隨着時間的推移在refs/builds/archived/*
中歸檔了一堆構建標記,現在我想刪除它們以恢復一些空間並減少總對象數(超過50k註釋的git標記存儲在那裏)。在git中,我如何有效地刪除所有匹配模式的refs?
這樣看來,要做到這一點的唯一方法是,像這樣:
git show-ref\
| awk '/refs\/builds\/archived\/[^\/]*$/ { print "git update-ref -d "$2}'\
| sh
這是極其緩慢。此外,這樣做似乎會減慢從回購完成的任何git提取,直到我運行git gc
就可以了。
從'git for-each-ref'開始而不是'git show-ref';這將在單個命令中爲您提供一組ref。不幸的是,批量刪除仍然會變得很慢:'git update-ref -d'只能一次處理一個。你可以使用xargs('-n 1')或者像在你自己的代碼sh中那樣調用'git update-ref'。 – torek
'git update-ref'需要一個'--stdin'標誌,讓你傳遞多個指令給它。 –
@KevinBallard:哦,很好,我從來沒有考慮過'--stdin'方法。這對一些系統應該有很大的幫助。 – torek