Для цикла по всем ветвям git с определенным именем

У меня есть следующие ветки git

foo
bar
foobar
feature/foo
feature/bar
feature/buzz

Как бы вы сделали цикл for по всем ветвям, начинающимся со слова 'feature/'?

Когда я пытаюсь выполнить следующее, это странно выводит больше, чем только ветки git.

for i in $(git branch --list "feature/*"); do echo $i; done;
stuff.txt
icon.jpg
morestuff.txt
Vagrantfile
feature/foo
feature/bar
feature/buzz

Ответы

Ответ 1

"Мы активно препятствуем использованию любой команды Porcelain, в том числе git ветки, в скриптах" - из Git Blog Maintainer

Вы хотите использовать что-то вроде

git for-each-ref --format='%(refname:short)' refs/heads/feature/

который отлично работает внутри конструкции for br in $()

Ответ 2

Вы можете использовать оболочку (Bash) для фильтрации ветвей, например:

git branch | while read branch; do [[ $branch = feature/* ]] && echo $branch; done

Другой способ:

git branch | grep ^feature/ | while read branch; do echo $branch; done

Это несколько короче, но он использует дополнительный процесс (grep), а не [[ ... ]], который является встроенным bash. (С другой стороны, если вы просто хотите распечатать список, вы можете опустить цикл while в этом примере, и в этом случае эта версия существенно короче первой.)