Для цикла по всем ветвям 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
в этом примере, и в этом случае эта версия существенно короче первой.)