在git中,如何有效删除与模式匹配的所有引用?

时间:2017-09-14 22:48:51

标签: git

我随着时间的推移在refs/builds/archived/*中存档了一堆构建标记,现在我想删除它们以恢复一些空间并减少总对象数(在那里存储了超过50k个带注释的git标记)。

看起来这样做的唯一方法是:

git show-ref\
 | awk '/refs\/builds\/archived\/[^\/]*$/ { print "git update-ref -d "$2}'\
 | sh

这非常慢。此外,这样做似乎会减慢从repo完成的任何git提取,直到我在其上运行git gc

1 个答案:

答案 0 :(得分:6)

你应该能够说出类似

的内容
git for-each-ref --format='delete %(refname)' refs/builds/archived | git update-ref --stdin

这应该在一次批量操作中完成所有操作。请注意,我自己并没有真正试过这个。