Рассмотрите возможность использования:
git for-each-ref --format="%(refname)" "refs/heads/origin/example*"
Подробности
Помните, что имена для удаленного отслеживания создаются и обновляются с помощью git fetch
(и удаляются при необходимости с помощью git fetch --prune
или git remote prune
) , поэтому, если вы собираетесь использовать свои имена для удаленного слежения - вместо использования git ls-remote
для прямого вызова пульта и получения его информации - убедитесь, что ваш Git достаточно актуален.
Тем не менее, сантехническая команда git for-each-ref
идеально подходит для этого. 1 Имена удаленного отслеживания, такие как origin/master
, на самом деле ссылки , полное написание которых начинается с refs/remotes/
. Это включает в себя само имя удаленного устройства, например origin
, затем еще одно sla sh, и после этого следует имя ветви, как видно на пульте: origin's
master
- это, например, ваш refs/remotes/origin/master
.
Команда for-each-ref принимает префикс и перечисляет только те ветви, которые начинаются с этого префикса (и /*
, если вы не добавили свой собственный *
). Так что, если вы имели в виду: only origin/example/*
, то:
git for-each-ref refs/heads/origin/example
выполняет итерацию по точно правильному набору имен. Но если вы имели в виду origin/example*
, вам нужно:
git for-each-ref "refs/heads/origin/example*"
Кавычка со звездочкой (как я сделал здесь) требуется в некоторых случаях и необязательна в других случаях, но всегда разрешена и никогда не причиняет вреда, поэтому Это хорошая идея, чтобы делать это всегда.
Теперь, вывод команды git for-each-ref
по умолчанию не то, что вам нужно, но его вывод чрезвычайно гибкий . В качестве команды, целью которой является генерация вывода, который вам нужен do , он имеет множество опций. Опция, которую вы хотите здесь: --format
, которая принимает директив форматирования . Вы, вероятно, хотите --format=%(refname)
или --format=%(refname:short)
. Мы не можем ответить на вопрос, какой именно вам нужен, и когда, и почему, мы не можем ответить вам самим:
Поскольку директива формата требует скобок, а некоторые интерпретаторы командной строки имеют свое собственное значение для скобок, вам, вероятно, нужно будет также заключить в кавычки. Я сделал это в приведенном выше примере.
1 Сантехническая команда - это команда, предназначенная для использования в сценарии. Это контрастирует с фарфоровой командой . В Git фарфоровые команды предназначены для взаимодействия с людьми. Они часто проводят вывод через пейджер (core.pager
), раскрашивают вывод и / или ведут себя по-разному для каждого пользователя в зависимости от настроек конфигурации пользователя. Команды Plumbing будут вести себя одинаково каждый раз, так что, например, программы, которые ожидают цветной или неокрашенный вывод, получат цветной или неокрашенный вывод на основе аргументов команды , а не на -пользовательская конфигурация.
При написании сценариев вы, как правило, предпочитаете команду сантехника, если она доступна. Иногда один недоступен: например, нет сантехнического эквивалента git log
. (Должно быть.) Сантехника git status
отсутствует, но git status
имеет опцию --porcelain=<version>
, которая преобразует ее в команду сантехника.