Какое определение для `pattern` для git ls-remote?
Какой тип "шаблон" делает git ls-remote
брать?
man git-ls-remote
говорит:
<refs>... When unspecified, all references, after filtering done with --heads and --tags, are shown. When <refs>... are specified, only references matching the given patterns are displayed.
Это оболочка POSIX, регулярное выражение, шаблон gitignore, ...?
2 ответа
Действительно, документация по
ls-remote
мало что говорит, но вы можете найти эту информацию на других страницах. Например, документация дляgit tag -l
говорит:
Шаблон представляет собой подстановочный знак оболочки (т. е. сопоставлен с использованием fnmatch(3)).
Насколько я могу судить, git поддерживает только базовый синтаксис glob , но не поддерживает «расширенные шаблоны», предоставляемые
FNM_EXTMATCH
.
Я думаю, что фильтрация на самом деле реализованаwildmatch()
, поэтому поведение может отличаться от стандартного
fnmatch
.
Обратите внимание, что в Git 2.40 (первый квартал 2023 г.) немного обновлено определение шаблона для .
См. и коммит baebde7 (10 февраля 2023 г.) Джеффа Кинга (
peff
).
(Объединено Джунио К. Хамано --
gitster
-- в коммите 6aac634, 22 февраля 2023 г.)
коммит d9ec3b0
doc/ls-remote
: уточнить формат шаблонаПодпись: Джефф Кинг
Мы документируем, что вы можете указать «refs» для
ls-remote
, но мы не объясняем ничего, кроме того, что они «сопоставляются» как шаблоны.
Поскольку это можно интерпретировать по-разному, давайте уточним, что это glob с согласованным хвостом .Аналогичным образом, давайте использовать слово «шаблоны», чтобы последовательно ссылаться на них, а не «ссылки» (как здесь, так и в кратком руководстве).
-h
» help) и более подробно упомяните, что необходимо сопоставить только один шаблон (хотя уже есть пример, показывающий это в действии).
теперь включает в свою справочную страницу :
[--symref] [<repository> [<patterns>...]]
git ls-remote
теперь включает в свою справочную страницу :
:
Если не указано, все ссылки после фильтрации, выполненной с помощью
--heads
и--tags
, показаны.Когда
<patterns>...
указаны, отображаются только ссылки, соответствующие одному или нескольким заданным шаблонам.
Каждый шаблон интерпретируется как glob , который сопоставляется с «хвостом» ссылки, начиная либо с начала ссылки (поэтому полное имя, напримерrefs/heads/foo
совпадений) или через косую черту (так чтоbar
Матчиrefs/heads/bar
но нетrefs/heads/foobar
).