В git, как я могу эффективно удалить все ссылки, соответствующие шаблону?

Я со временем архивировал кучу тегов сборки в refs/builds/archived/* и теперь я хочу удалить их, чтобы восстановить некоторое пространство и уменьшить общее количество объектов (там хранится более 50 тыс. Аннотированных git-тегов).

Казалось бы, единственный способ сделать это так:

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

Это очень медленно. Кроме того, выполнение этого, похоже, замедляет любые извлечения git, выполненные из репо, пока я не запустил git gc .

Вы должны быть в состоянии сказать что-то вроде

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

Это должно делать все это в одной объемной операции. Заметьте, что я на самом деле не пробовал это сам.