Git фильтр тег не работает для нескольких шаблонов - PullRequest
1 голос
/ 21 мая 2019

Согласно документу,

Running "git tag" without arguments also lists all tags. The pattern is a shell wildcard (i.e., matched using fnmatch(3)). Multiple patterns may be given; if any of them matches, the tag is shown.

в репозитории есть несколько тегов, и я хочу перечислить только два набора шаблонов в параметрах Jenkins Git.

Подключаемые модули Jenkins Git Parameterиспользуются для фильтрации "git tag -l {pattern}", а шаблон основан на fnmatch.

Пример тега DEV2.3.4 ST2.4.6 SIT2.1.6

I просто отфильтроватьтеги DEV и ST.Я попробовал несколько разных шаблонов.

git tag -l '(?:ST|DEV)\*'$/

git tag -l '/^DEV[0-9]+(\.[0-9]+)*$/'

git tag -l '@(DEV*|ST*)'

Не могли бы вы мне помочь?

Ответы [ 2 ]

2 голосов
/ 22 мая 2019

Важнейшая часть вашей цитаты выше:

Шаблон представляет собой подстановочный знак оболочки (то есть сопоставляется с помощью fnmatch (3)).

Подстановочные знаки оболочки совпадают только с *, ? и [...]. 1 Они неявно укоренены на обоих концах. Например, шаблон a*z соответствует abcz, axyz и az, но не azy (не заканчивается с z) и baz (не начало с a). В шаблонах подстановочных знаков в оболочке вопросительные знаки соответствуют любому символу, звездочки соответствуют нулю или более любого символа, а выражения в квадратных скобках соответствуют этим символам. Вы можете получить все DEV с DEV* и все ST с ST*, но нет синтаксиса, который бы соответствовал обоим.


1 Функция библиотеки C fnmatch принимает флаги, которые изменяют ее поведение, и в системах с GNU fnmatch вы можете получить некоторые расширенные формы, включая @(pattern1|pattern2), который вы пытались. Но Git не устанавливает флаг, который разрешает это.

1 голос
/ 23 мая 2019

Как уже заметил @torek: «регулярное выражение» не является «шаблоном» (он же «глоб»).Но вы можете эмулировать ИЛИ (|) регулярного выражения, используя несколько шаблонов, потому что

[...] Может быть задано несколько шаблонов;если какой-либо из них совпадает, отображается тег.

Таким образом, можно выбрать теги DEV* и ST*:

git tag --list 'DEV*' 'ST*'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...