git-for-each-ref
Имя
git-for-each-ref — вывод информации о каждой ссылке
Синопсис
git for-each-ref [--count=<count>] [--shell|--perl|--python|--tcl]
[(--sort=<key>)…] [--format=<format>]
[--include-root-refs] [--points-at=<object>]
[--merged[=<object>]] [--no-merged[=<object>]]
[--contains[=<object>]] [--no-contains[=<object>]]
[(--exclude=<pattern>)…] [--start-after=<marker>]
[ --stdin | (<pattern>...)] Описание
Перебирает все ссылки, соответствующие <pattern>, и выводит их в соответствии с заданным <format>, предварительно отсортировав их согласно заданному набору <key>. Если задано <count>, вывод прекращается после отображения указанного количества ссылок. Интерполированные значения в <format> при необходимости можно заключить в кавычки как строковые литералы на указанном языке-хосте, что позволяет напрямую вычислить их на этом языке.
Параметры
- <pattern>...
-
Если задан один или несколько параметров
<pattern>, выводятся только ссылки, соответствующие хотя бы одному шаблону — с использованиемfnmatch(3) или буквально; во втором случае совпадение должно быть полным либо начинаться с начала строки и заканчиваться косой чертой. -
--stdin -
Список шаблонов считывается из стандартного ввода, а не из списка аргументов.
-
--count=<count> -
Прекратить вывод после отображения
<count>ссылок. -
--sort=<key> -
Сортировать по имени поля
<key>. Добавьте префикс-, чтобы сортировать значения в порядке убывания. Если параметр не указан, используетсяrefname. Параметр--sort=<key> можно использовать несколько раз; в этом случае последний ключ становится основным. -
--format[=<format>] -
Строка, которая подставляет значения
%(fieldname) из отображаемой ссылки и объекта, на который она указывает. Кроме того, строковый литерал%%преобразуется в%, а%xx, гдеxx— шестнадцатеричные цифры, — в символ с шестнадцатеричным кодомxx. Например,%00подставляется как \0 (NUL),%09— как \t (TAB), а%0a— как \n (LF).
Если параметр <format> не указан, по умолчанию используется %(objectname) SPC %(objecttype) TAB %(refname).
-
--color[=<when>] -
Учитывать цвета, указанные в параметре
--format. Поле<when>должно принимать одно из значений:always,neverилиauto(если<when>отсутствует, поведение такое же, как при указанииalways). -
--shell -
--perl -
--python -
--tcl -
Если параметр задан, строки, подставляемые вместо заполнителей
%(fieldname), заключаются в кавычки как строковые литералы, подходящие для указанного языка-хоста. Это позволяет создать фрагмент скрипта, который можно напрямую выполнить с помощью «eval». -
--points-at=<object> -
Выводить только ссылки, указывающие на заданный объект.
-
--merged[=<object>] -
Выводить только ссылки, вершины которых достижимы из указанного коммита (если он не задан, используется
HEAD). -
--no-merged[=<object>] -
Выводить только ссылки, вершины которых недостижимы из
<object>(если он не задан, используетсяHEAD). -
--contains[=<object>] -
Выводить только ссылки, содержащие
<object>(если он не задан, используетсяHEAD). -
--no-contains[=<object>] -
Выводить только ссылки, не содержащие
<object>(если он не задан, используетсяHEAD). -
--ignore-case -
Сортировать и фильтровать ссылки без учета регистра.
-
--omit-empty -
Не выводить символ новой строки после ссылок, для которых формат преобразуется в пустую строку.
-
--exclude=<excluded-pattern> -
Если задан один или несколько параметров
--exclude, выводятся только ссылки, не соответствующие ни одному параметру<excluded-pattern>. Сопоставление выполняется по тем же правилам, что и для<pattern>выше. -
--include-root-refs -
Выводить корневые ссылки (
HEADи псевдоссылки) вместе с обычными ссылками. -
--start-after=<marker> -
Позволяет разбивать вывод на страницы, пропуская ссылки до указанного маркера включительно. При постраничном выводе следует учитывать, что между вызовами ссылки могут быть удалены, изменены или добавлены. В вывод попадут только ссылки, расположенные после маркера в лексикографическом порядке. Вывод начинается с первой ссылки, которая следовала бы за маркером в алфавитном порядке. Нельзя использовать вместе с параметрами
--sort=<key> или--stdin, а также с аргументами<pattern>, ограничивающими список ссылок.
Имена полей
Для интерполяции в результирующий вывод или в качестве ключей сортировки можно использовать различные значения из структурированных полей объектов, на которые указывают ссылки.
Для всех объектов можно использовать следующие имена:
-
refname -
Имя ссылки (часть после
$GIT_DIR/). Чтобы получить однозначное короткое имя ссылки, добавьте:short. Для выбора строгого режима сокращения используется параметрcore.warnAmbiguousRefs. Если добавленоlstrip=<n> (rstrip=<n>), удалите<n>разделённых косой чертой компонентов пути из начала (конца) имени ссылки (например,%(refname:lstrip=2) преобразуетrefs/tags/fooвfoo, а%(refname:rstrip=2) преобразуетrefs/tags/fooвrefs). Если<n>— отрицательное число, удаляется необходимое количество компонентов пути с указанного конца, чтобы осталось-<n> компонентов пути (например,%(refname:lstrip=-2) преобразуетrefs/tags/fooвtags/foo, а%(refname:rstrip=-1) преобразуетrefs/tags/fooвrefs). Если у ссылки недостаточно компонентов, результатом будет пустая строка при удалении с положительным<n>или полное имя ссылки при удалении с отрицательным<N>. Ни один из этих случаев не считается ошибкой.stripможно использовать как синонимlstrip. -
objecttype -
Тип объекта (
blob,tree,commit,tag). -
objectsize -
Размер объекта (тот же, что сообщает
git cat-file -s). Добавьте:disk, чтобы получить размер объекта в байтах на диске. См. примечание о размерах на диске в разделеCAVEATSниже. -
objectname -
Имя объекта (также называемое SHA-1). Чтобы получить однозначное сокращение имени объекта, добавьте
:short. Чтобы задать желаемую длину сокращения имени объекта, добавьте:short=<length>, где минимальная длина —MINIMUM_ABBREV. Длина может быть увеличена, чтобы обеспечить уникальность имён объектов. -
deltabase -
Раскрывается в имя объекта, являющегося базой дельты для данного объекта, если тот хранится в виде дельты. В противном случае раскрывается в имя пустого объекта (состоящее из нулей).
-
upstream -
Имя локальной ссылки, которую можно считать «вышестоящей» для отображаемой ссылки. Поддерживает параметры
:short,:lstripи:rstripтак же, как описанный выше параметрrefname. Кроме того, поддерживает:track, который выводит «[ahead N, behind M]», и:trackshort, который выводит сокращённую версию: «>» (впереди), «<» (позади), «<>» (впереди и позади) или «=» (синхронизирована).:trackтакже выводит «[gone]», если обнаружена неизвестная вышестоящая ссылка. Добавьте:track,nobracket, чтобы вывести сведения об отслеживании без скобок (т. е. «ahead N, behind M»).Для любой ветки отслеживания удалённого репозитория
%(upstream),%(upstream:remotename) и%(upstream:remoteref) относятся соответственно к имени удалённого репозитория и имени отслеживаемой ссылки удалённого репозитория. Иными словами, ветку отслеживания удалённого репозитория можно обновить явно и отдельно, используя спецификацию ссылки%(upstream:remoteref):%(upstream) для получения данных из%(upstream:remotename).Не действует, если для ссылки не заданы сведения об отслеживании. Все параметры, кроме
nobracket, взаимоисключающие; если указано несколько, выбирается последний. -
push -
Имя локальной ссылки, представляющей расположение
@{push}для отображаемой ссылки. Поддерживает параметры:short,:lstrip,:rstrip,:track,:trackshort,:remotenameи:remoterefтак же, какupstream. Выводит пустую строку, если ссылка@{push}не настроена. -
HEAD -
*, еслиHEADсоответствует текущей ссылке (извлечённой ветке), и ' ' в противном случае. -
color -
Изменить цвет вывода. За ним следует
:<colorname>; названия цветов описаны в разделе «ЗНАЧЕНИЯ» раздела «ФАЙЛ КОНФИГУРАЦИИ» в git-config[1]. Например,%(color:boldred). -
align -
Выровнять содержимое между
%(align:...) и%(end) по левому краю, по центру или по правому краю. За «align:» следуютwidth=<width> иposition=<position> в любом порядке, разделённые запятой;<position>может принимать значенияleft,rightилиmiddle, по умолчанию используетсяleft, а<width>— общая длина выровненного содержимого. Для краткости префиксы «width=» и/или «position=» можно опустить и использовать только<width>и<position>. Например:%(align:<width>,<position>). Если длина содержимого превышает ширину, выравнивание не выполняется. При использовании с--quoteвсё содержимое между%(align:...) и%(end) экранируется; при вложенности экранирование выполняется только на верхнем уровне. -
if -
Используется в форме
%(if)...%(then)...%(end) или%(if)...%(then)...%(else)...%(end). Если после атома%(if) есть атом со значением или строковый литерал, выводится всё содержимое после%(then); если же используется атом%(else), выводится всё содержимое после %(else). При вычислении строки перед%(then) пробелы игнорируются. Это полезно, когда используется атом%(HEAD), выводящий либо «*», либо « », и нужно применить условиеifтолько к ссылкеHEAD. Добавьте «:equals=<string>» или «:notequals=<string>», чтобы сравнить значение между атомами%(if:...) и%(then) с заданной строкой. -
symref -
Ссылка, на которую указывает заданная символическая ссылка. Если это не символическая ссылка, ничего не выводится. Поддерживает параметры
:short,:lstripи:rstripтак же, как описанный выше параметрrefname. -
signature -
Подпись GPG коммита.
-
signature:grade -
Выводит
-
G -
для хорошей (действительной) подписи
-
B -
для недействительной подписи
-
U -
для действительной подписи с неизвестным статусом проверки
-
X -
для действительной подписи с истёкшим сроком действия
-
Y -
для действительной подписи, созданной просроченным ключом
-
R -
для действительной подписи, созданной отозванным ключом
-
E -
если подпись не удалось проверить (например, отсутствует ключ)
-
N -
если подписи нет.
-
-
signature:signer -
Подписавший подписью GPG автор коммита.
-
signature:key -
Ключ подписи GPG коммита.
-
signature:fingerprint -
Отпечаток подписи GPG коммита.
-
signature:primarykeyfingerprint -
Отпечаток первичного ключа подписи GPG коммита.
-
signature:trustlevel -
Уровень доверия к подписи GPG коммита. Возможные значения:
ultimate,fully,marginal,neverиundefined. -
worktreepath -
Абсолютный путь к рабочему дереву, в котором извлечена ссылка, если она извлечена в каком-либо связанном рабочем дереве. В противном случае — пустая строка.
-
ahead-behind:<commit-ish> -
Два целых числа, разделённых пробелом, показывающие соответственно количество коммитов впереди и позади при сравнении выводимой ссылки с
<committish>, указанным в формате. -
is-base:<commit-ish> -
Не более чем в одной строке будет указано (<commit-ish>), обозначающее ссылку, которая, скорее всего, использовалась как начальная точка ветки, породившей
<commit-ish>. Выбор делается с помощью эвристики: выбирается ссылка, для которой количество коммитов в истории по первым родителям<commit-ish>, отсутствующих в истории по первым родителям этой ссылки, минимально.Например, рассмотрим следующий рисунок историй по первым родителям нескольких ссылок:
*--*--*--*--*--* refs/heads/A \ \ *--*--*--* refs/heads/B \ \ \ \ * * refs/heads/C \ \ *--* refs/heads/DЗдесь, если
A,BиC— отфильтрованные ссылки, а строка формата —%(refname):%(is-base:D), то результат будет таким:refs/heads/A: refs/heads/B:(D) refs/heads/C:
Это объясняется тем, что история по первым родителям ссылки
Dвпервые пересекается с историями по первым родителям отфильтрованных ссылок в общем предке по первым родителям ссылокBиC; при равенстве выбирается ссылка, стоящая раньше в отсортированном порядке.Обратите внимание: этот токен не появится, если история по первым родителям
<commit-ish>не пересекается с историями по первым родителям отфильтрованных ссылок. -
describe[:<option>,...] -
Удобочитаемое имя, аналогичное имени, выдаваемому git-describe[1]; для коммитов, которым нельзя назначить описание, выводится пустая строка. После строки
describeмогут следовать двоеточие и один или несколько параметров, разделённых запятыми.-
tags=<bool-value> -
Помимо аннотированных тегов учитывать также лёгкие теги; подробности см. в соответствующем параметре git-describe[1].
-
abbrev=<number> -
Использовать не менее
<number>шестнадцатеричных цифр; подробности см. в соответствующем параметре git-describe[1]. -
match=<pattern> -
Учитывать только теги, соответствующие
<pattern>glob(7), без префиксаrefs/tags/; подробности см. в соответствующем параметре git-describe[1]. -
exclude=<pattern> -
Не учитывать теги, соответствующие
<pattern>glob(7), без префиксаrefs/tags/; подробности см. в соответствующем параметре git-describe[1].
-
Кроме перечисленного выше, для объектов коммитов и тегов можно использовать имена полей заголовка (tree, parent, object, type и tag), чтобы указать значение поля заголовка. К полям tree и parent также можно применять модификаторы :short и :short=<length>, как и к objectname.
Для объектов коммитов и тегов специальные поля creatordate и creator соответствуют нужной дате или кортежу «имя-адрес электронной почты-дата» из полей committer или tagger в зависимости от типа объекта. Они предназначены для работы с сочетанием аннотированных и лёгких тегов.
Для объектов тегов поле fieldname, перед которым стоит звёздочка (*), раскрывается в значение fieldname разыменованного объекта, а не самого объекта-тега.
К полям, значением которых является кортеж «имя-адрес электронной почты-дата» (author, committer и tagger), можно добавить суффиксы name, email и date, чтобы извлечь соответствующий компонент. Для полей адреса электронной почты (authoremail, committeremail и taggeremail) можно добавить :trim, чтобы получить адрес без угловых скобок, и :localpart, чтобы получить часть обрезанного адреса до символа @. Кроме того, можно использовать параметр :mailmap и соответствующие ему :mailmap,trim и :mailmap,localpart (порядок не важен), чтобы получить имя и адрес электронной почты согласно файлу .mailmap или файлу, указанному в переменной конфигурации mailmap.file или mailmap.blob (см. gitmailmap[5]).
Необработанные данные объекта — это raw.
-
raw:size -
Размер необработанных данных объекта.
Обратите внимание, что --format=%(raw) нельзя использовать с --python, --shell, --tcl, поскольку такие языки могут не поддерживать произвольные двоичные данные в строковых переменных.
Сообщение в объекте коммита или тега — это contents; с помощью contents:<part> можно извлечь из него различные части:
-
contents:size -
Размер сообщения коммита или тега в байтах.
-
contents:subject -
Первый абзац сообщения, обычно состоящий из одной строки, считается «темой» коммита или сообщения тега. Вместо
contents:subjectдля получения того же результата можно использовать полеsubject. Кsubjectможно добавить:sanitize, чтобы получить строку темы, подходящую для имени файла. -
contents:body -
Остаток сообщения коммита или тега после «темы».
-
contents:signature -
Необязательная подпись GPG тега.
-
contents:lines=<n> -
Первые
<n>строк сообщения.
Кроме того, трейлеры в интерпретации git-interpret-trailers[1] доступны как trailers[:<option>,...] (или с помощью исторического псевдонима contents:trailers[:<option>,...]). Допустимые значения <option> см. в разделе trailers справки git-log[1].
При сортировке поля с числовыми значениями сортируются по числовому значению (objectsize, authordate, committerdate, creatordate, taggerdate). Все остальные поля сортируются в порядке байтовых значений.
Также можно сортировать по версиям, используя имя поля version:refname или его псевдоним v:refname.
В любом случае, если имя поля указывает на поле, неприменимое к объекту, на который ссылается ссылка, это не приводит к ошибке. Вместо этого возвращается пустая строка.
Для полей типа даты можно задать формат даты, добавив :, за которым следует название формата даты (см. значения, принимаемые параметром --date команды git-rev-list[1]). Если такое форматирование задано для ключа --sort, ссылки будут сортироваться по байтовому значению отформатированной строки, а не по числовому значению исходной временной метки.
Для некоторых атомов, например %(align) и %(if), обязательно требуется соответствующий %(end). Мы называем их «открывающими атомами» и иногда обозначаем как %($open).
Если используется специфичное для языка сценариев экранирование, всё содержимое между открывающим атомом верхнего уровня и соответствующим ему %(end) вычисляется согласно семантике открывающего атома, и экранируется только результат верхнего уровня.
Примеры
Пример непосредственного вывода форматированного текста. Показать последние 3 коммита с тегами:
#!/bin/sh git for-each-ref --count=3 --sort='-*authordate' \ `--format='From: %(*authorname) %(*authoremail) Subject: %(*subject) Date: %(*authordate) Ref: %(*refname) %(*body) ' 'refs/tags'
Простой пример применения shell eval к выводу, демонстрирующий использование --shell. Вывести префиксы всех веток:
#!/bin/sh
git for-each-ref --shell --format="ref=%(refname)" refs/heads | \
while read entry
do
eval "$entry"
echo `dirname $ref`
done Более подробный отчёт о тегах, демонстрирующий, что формат может представлять собой целый сценарий:
#!/bin/sh
fmt='
r=%(refname)
t=%(*objecttype)
T=${r#refs/tags/}
o=%(*objectname)
n=%(*authorname)
e=%(*authoremail)
s=%(*subject)
d=%(*authordate)
b=%(*body)
kind=Tag
if test "z$t" = z
then
# could be a lightweight tag
t=%(objecttype)
kind="Lightweight tag"
o=%(objectname)
n=%(authorname)
e=%(authoremail)
s=%(subject)
d=%(authordate)
b=%(body)
fi
echo "$kind $T points at a $t object $o"
if test "z$t" = zcommit
then
echo "The commit was authored by $n $e
at $d, and titled
$s
Its message reads as:
"
echo "$b" | sed -e "s/^/ /"
echo
fi
'
eval=`git for-each-ref --shell --format="$fmt" \
--sort='*objecttype' \
--sort=-taggerdate \
refs/tags`
eval "$eval" Пример использования %(if)...%(then)...%(else)...%(end). Этот формат добавляет звёздочку перед текущей веткой.
git for-each-ref --format="%(if)%(HEAD)%(then)* %(else) %(end)%(refname:short)" refs/heads/
Пример использования %(if)...%(then)...%(end). Выводит имя автора, если оно указано.
git for-each-ref --format="%(refname)%(if)%(authorname)%(then) Authored by: %(authorname)%(end)"
Предостережения
Обратите внимание: размеры объектов на диске указываются точно, однако делать выводы о том, какие ссылки или объекты занимают место на диске, следует с осторожностью. Размер упакованного объекта без дельты может быть намного больше размера объектов, для которых он используется как база дельты, однако выбор того, какой объект будет базой, а какой — дельтой, произволен и может измениться при повторной упаковке.
Также обратите внимание, что в базе объектов могут присутствовать несколько копий одного объекта; в таком случае не определено, размер какой копии или база дельты какой копии будут выведены.
Примечания
При объединении нескольких фильтров --contains и --no-contains отображаются только ссылки, которые содержат как минимум один из коммитов --contains и не содержат ни одного коммита --no-contains.
При объединении нескольких фильтров --merged и --no-merged отображаются только ссылки, достижимые как минимум из одного коммита --merged и недостижимые ни из одного коммита --no-merged.
См. также
for-each-ref
© 2005–2026 Linus Torvalds and others
Licensed under the GNU General Public License version 2.
https://git-scm.com/docs/git-for-each-ref