Git: как в журнале показывать только теги, которые соответствуют шаблону? - PullRequest
0 голосов
/ 20 октября 2018

Я пытаюсь перечислить теги и хэши на ветке, когда тег соответствует определенному шаблону.

У меня есть команда, которая выглядит следующим образом:

git log develop --tags="develop*" --remove-empty --pretty="%h %D" --decorate=short --decorate-refs=tags

Я предположил вышевыведет для меня список хэшей коммитов с тегами, которые соответствуют шаблону "develop*" (например, develop_001).Но я все еще получаю коммиты с тегами, которые не соответствуют шаблону (например, feature/*).Я включаю снимок с вывода, который я получаю:

git log output

Кроме того, есть ли способ избавиться от коммитов, которые не помечены?

Ответы [ 2 ]

0 голосов
/ 21 октября 2018

Если вы хотите перечислить теги, не используйте git log, в котором перечислены коммиты.Просто используйте что-то, перечисляющее теги вроде этого:

git tag --format="%(objectname:short) %(refname:short)" --merged develop  "v18*"

Здесь --format дает вывод хеш + тега, -merged develop ограничивает вывод тегами, являющимися предками ветви develop и v18* istдополнительный фильтр для тегов, соответствующих этому шаблону.

0 голосов
/ 20 октября 2018

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

Чтобы указать git log не для обхода графика фиксации, используйте --no-walk.(Или используйте одну из других опций, которая подавляет переход по графу, но здесь --no-walk - правильный флаг.)

Обратите внимание, что вы, вероятно, также хотите, чтобы not указывал, чтобы он запускалсяот develop.Общая идея (которую, опять же, вы скажете , а не ), заключается в том, что вы даете git log некоторый начальный коммит или набор коммитов.Он находит эти коммиты, затем находит каждый родительский коммит каждого из этих коммитов, затем родителей этих родителей и так далее.Когда он работает, он распечатывает коммиты, которые еще не посетили, а затем посещает их родителей.

Каждая из положительных ссылок (как их называет Git), таких как develop или --tags="develop*" действует как начальная точка .Git покажет , что совершает коммит, а затем выполняет поиск по графу / поиск родителей.

Добавление --no-walk останавливает поиск родителя, так что git log показывает только начальные коммиты.

...