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

Chr*_*tze 2 git

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

似乎这样做的唯一方法是:

git show-ref\
 | awk '/refs\/builds\/archived\/[^\/]*$/ { print "git update-ref -d "$2}'\
 | sh
Run Code Online (Sandbox Code Playgroud)

这非常慢.此外,这样做似乎会减慢从repo完成的任何git提取,直到我开始运行git gc它.

Lil*_*ard 7

你应该能够说出类似的话

git for-each-ref --format='delete %(refname)' refs/builds/archived | git update-ref --stdin
Run Code Online (Sandbox Code Playgroud)

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

  • 有效.太快了.也许是因为缺乏参考资料.. (2认同)