Русский ▾ Topics ▾ Latest version ▾ git-for-each-ref last updated in 2.54.0

НАЗВАНИЕ

git-for-each-ref — Вывод информации о каждой ссылке

ОБЗОР

git for-each-ref [--count=<число>] [--shell|--perl|--python|--tcl]
		   [(--sort=<ключ>)…​] [--format=<формат>]
		   [--include-root-refs] [--points-at=<объект>]
		   [--merged[=<объект>]] [--no-merged[=<объект>]]
		   [--contains[=<объект>]] [--no-contains[=<объект>]]
		   [(--exclude=<шаблон>)…​] [--start-after=<маркер>]
		   [ --stdin | (<шаблон>...)]

ОПИСАНИЕ

Перебирает все ссылки, соответствующие <шаблон>, и показывает их в соответствии с заданным <форматом>, после сортировки в соответствии с заданным набором <ключ>. Если задано <число>, останавливается после показа такого количества ссылок. Интерполированные значения в <формат> могут быть заключены в кавычки как строковые литералы на указанном языке, позволяя их непосредственное вычисление на этом языке.

ПАРАМЕТРЫ

<шаблон>...

Если указан один или несколько параметров <шаблон>, отображаются только ссылки, соответствующие хотя бы одному шаблону, либо с использованием fnmatch(3), либо буквально, в последнем случае совпадение должно быть полным или с начала до косой черты.

--stdin

Список шаблонов считывается из стандартного ввода, а не из списка аргументов.

--count=<число>

Остановиться после отображения <число> ссылок.

--sort=<ключ>

Сортировать по имени поля <ключ>. Префикс - для сортировки по убыванию значения. Если не указано, используется refname. Вы можете использовать опцию --sort=<ключ> несколько раз, и в этом случае последний ключ станет основным ключом сортировки.

--format[=<format>]

Строка, которая интерполирует %(имя_поля) из отображаемой ссылки и объекта, на который она указывает. Кроме того, строковый литерал %% отображается как %, а %xx — где xx шестнадцатеричные цифры — отображается как символ с шестнадцатеричным кодом xx. Например, %00 интерполируется в \0 (NUL), %09 в \t (TAB), а %0a в \n (LF).

Если не указано, <формат> по умолчанию равен %(objectname) SPC %(objecttype) TAB %(refname).

--color[=<когда>]

Учитывать любые цвета, указанные в опции --format. Поле <когда> должно быть одним из 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, отображаются только ссылки, которые не соответствуют ни одному параметру <исключающий_шаблон>. Сопоставление выполняется по тем же правилам, что и для <шаблон> выше.

--include-root-refs

Выводит корневые ссылки (HEAD и псевдо-ссылки) отдельно от обычных ссылок.

--start-after=<marker>

Позволяет разбивать вывод на страницы, пропуская ссылки вплоть до указанного маркера включительно. При разбиении на страницы следует отметить, что ссылки могут быть удалены, изменены или добавлены между вызовами. Вывод будет содержать только те ссылки, которые следуют за маркером в лексикографическом порядке. Вывод начинается с первой ссылки, которая идёт после маркера в алфавитном порядке. Нельзя использовать с опциями --sort=<ключ> или --stdin, или с аргументами <шаблон> для ограничения ссылок.

ИМЕНА ПОЛЕЙ

Различные значения из структурированных полей в объектах, на которые есть ссылки, могут использоваться для интерполяции в результирующий вывод или в качестве ключей сортировки.

Для всех объектов можно использовать следующие имена:

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, чтобы получить размер в байтах, который объект занимает на диске. См. примечание о размерах на диске в разделе «ПРЕДОСТЕРЕЖЕНИЯ» ниже.

objectname

Имя объекта (также известное как SHA-1). Для неоднозначного сокращения имени объекта добавьте :short. Для сокращения имени объекта желаемой длины добавьте :short=<длина>, где минимальная длина — MINIMUM_ABBREV. Длина может быть превышена, чтобы гарантировать уникальность имён объектов.

deltabase

Раскрывается в имя объекта базы дельты для данного объекта, если он хранится как дельта. В противном случае раскрывается в нулевое имя объекта (все нули).

upstream

Имя локальной ссылки, которую можно считать «вышестоящей» (upstream) для отображаемой ссылки. Учитывает :short, :lstrip и :rstrip так же, как и refname выше. Также учитывает :track для отображения «[впереди N, позади M]» и :trackshort для отображения краткой версии: ">" (впереди), "<" (позади), "<>" (впереди и позади) или "=" (синхронно). :track также выводит «[gone]», когда встречается неизвестная вышестоящая ссылка. Добавьте :track,nobracket для отображения информации об отслеживании без скобок (т.е. «впереди N, позади 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

Изменить цвет вывода. За которым следует :<имя-цвета>, где имена цветов описаны в разделе «ФАЙЛ КОНФИГУРАЦИИ» в git-config[1] (в разделе Values). Например, %(color:bold red).

align

Выравнивает содержимое между %(align:...) и %(end) по левому, центральному или правому краю. После «align:» следуют width=<ширина> и position=<позиция> в любом порядке, разделённые запятой, где <позиция> может быть left, right или middle (по умолчанию left), а <ширина> — это общая длина выравниваемого содержимого. Для краткости префиксы «width=» и/или «position=» могут быть опущены, и вместо них используются просто <ширина> и <позиция>. Например, %(align:<ширина>,<позиция>). Если длина содержимого превышает ширину, выравнивание не выполняется. Если используется с --quote, всё между %(align:...) и %(end) заключается в кавычки, но при вложенности только самый верхний уровень выполняет цитирование.

if

Используется как %(if)...%(then)...%(end) или %(if)...%(then)...%(else)...%(end). Если после %(if) есть атом со значением или строковый литерал, то выводится всё после %(then), иначе, если используется атом %(else), выводится всё после %(else). Пробелы при вычислении строки перед %(then) игнорируются, это полезно, когда мы используем атом %(HEAD), который выводит либо «*», либо пробел, и мы хотим применить условие if только к ссылке HEAD. Добавьте ":equals=<строка>" или ":notequals=<строка>", чтобы сравнить значение между атомами %(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:<указатель-на-коммит>

Два целых числа, разделённых пробелом, показывающих количество коммитов впереди и позади соответственно при сравнении выходной ссылки с <указатель-на-коммит>, указанным в формате.

is-base:<указатель-на-коммит>

Не более чем в одной строке появится (<указатель-на-коммит>), указывающий на ссылку, которая, вероятнее всего, использовалась в качестве отправной точки для ветки, породившей <указатель-на-коммит>. Этот выбор делается с использованием эвристики: выбирается ссылка, которая минимизирует количество коммитов в истории первого родителя <указатель-на-коммит>, отсутствующих в истории первого родителя ссылки.

Например, рассмотрим следующий рисунок историй первых родителей нескольких ссылок:

*--*--*--*--*--* 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, а связи разрешаются в пользу самой ранней ссылки в отсортированном порядке.

Обратите внимание, что этот токен не появится, если история первого родителя <указатель-на-коммит> не пересекается с историями первых родителей отфильтрованных ссылок.

describe[:<параметр>,...]

Удобочитаемое имя, как в git-describe[1]; пустая строка для коммитов, которые нельзя описать. За строкой describe могут следовать двоеточие и один или несколько параметров, разделённых запятыми.

tags=<логическое-значение>

Вместо учёта только аннотированных меток, учитывать также легковесные метки; подробности см. в соответствующем параметре в git-describe[1].

abbrev=<число>

Использовать по крайней мере <число> шестнадцатеричных цифр; подробности см. в соответствующем параметре в git-describe[1].

match=<шаблон>

Учитывать только метки, соответствующие шаблону glob(7) <шаблон>, исключая префикс refs/tags/; подробности см. в соответствующей опции в git-describe[1].

exclude=<шаблон>

Не учитывать метки, соответствующие шаблону glob(7) <шаблон>, исключая префикс refs/tags/; подробности см. в соответствующей опции в git-describe[1].

В дополнение к вышесказанному, для объектов-коммитов и объектов-меток можно использовать имена полей заголовка (tree, parent, object, type и tag) для указания значения в поле заголовка. Поля tree и parent также могут использоваться с модификаторами :short и :short=<длина>, как и objectname.

Для объектов-коммитов и объектов-меток специальные поля creatordate и creator будут соответствовать соответствующей дате или кортежу имя-email-дата из полей committer или tagger в зависимости от типа объекта. Они предназначены для работы со смесью аннотированных и легковесных меток.

Для объектов-меток имя-поля с префиксом в виде звёздочки (*) раскрывается в значение имя-поля очищенного (peeled) объекта, а не самого объекта-метки.

Поля, имеющие кортеж имя-email-дата в качестве значения (author, committer и tagger), могут иметь суффиксы name, email и date для извлечения именованного компонента. Для полей email (authoremail, committeremail и taggeremail) можно добавить :trim, чтобы получить email без угловых скобок, и :localpart, чтобы получить часть до символа @ из обрезанного email. В дополнение к этому можно использовать опцию :mailmap и соответствующие :mailmap,trim и :mailmap,localpart (порядок не важен), чтобы получить значения имени и email в соответствии с файлом .mailmap или файлом, заданным в переменной конфигурации mailmap.file или mailmap.blob (см. gitmailmap[5]).

Необработанные данные в объекте — это raw.

raw:size

Размер необработанных данных объекта.

Обратите внимание, что --format=%(raw) нельзя использовать с --python, --shell, --tcl, поскольку такие языки могут не поддерживать произвольные двоичные данные в своём строковом типе переменной.

Сообщение в объекте-коммите или объекте-метке — это contents, из которого можно использовать contents:<часть> для извлечения различных частей:

contents:size

Размер в байтах сообщения коммита или метки.

contents:subject

Первый абзац сообщения, который обычно представляет собой одну строку, принимается за «тему» (subject) коммита или сообщения метки. Вместо contents:subject поле subject также можно использовать для получения тех же результатов. К subject можно добавить :sanitize для строки темы, подходящей для имени файла.

contents:body

Остальная часть сообщения коммита или метки, следующая за «темой».

contents:signature

Необязательная GPG-подпись метки.

contents:lines=<n>

Первые <n> строк сообщения.

Кроме того, завершители (trailers), интерпретируемые git-interpret-trailers[1], получаются как trailers[:<параметр>,...] (или с использованием исторического псевдонима contents:trailers[:<параметр>,...]). Допустимые значения <параметр> см. в разделе 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
		# может быть легковесная метка
		t=%(objecttype)
		kind="Lightweight tag"
		o=%(objectname)
		n=%(authorname)
		e=%(authoremail)
		s=%(subject)
		d=%(authordate)
		b=%(body)
	fi
	echo "$kind $T указывает на объект $t $o"
	if test "z$t" = zcommit
	then
		echo "Коммит был создан $n $e
в $d, и озаглавлен

    $s

Его сообщение:
"
		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.

СМ. ТАКЖЕ

GIT

Является частью пакета git[1]