Подтвердить что ты не робот

Как получить список последних тегов в удаленном git?

Существует множество методов для получения последних тегов, когда у вас есть локальный репозиторий git.

Но я хочу получить список последних тегов для удаленного репо.

Я знаю о "git ls-remote", и все отлично, когда вы используете теги, такие как x.y.z(где x, y, z - числа). Но когда теги выглядят как "test-x.y.z" и "dev-x.y.z", я заметил, что большое количество тегов "test" вытаскивает любые новые теги "dev", что неверно.

Итак, как бы вы хотели это решить?

4b9b3361

Ответ 1

В Git 2.18 (Q2 2018) git ls-remote узнал опцию, позволяющую сортировать свои выходные данные по отображаемым именам ссылок.

См. Коммит 1fb20df (09 апреля 2018 г.) Харальда Нордгрена (HaraldNordgren).
(Объединено Junio C Hamano - gitster - в коммите 6c0110f, 8 мая 2018 г.)

ls-remote: создать --sort ' --sort '

Создайте опцию ' --sort ' для ls-remote, основываясь на параметре from for-each-ref.
Это, например, позволяет сортировать имена ссылок по семантике версий, так что v1.2 сортируется до v1.10.

Итак, ознакомьтесь с опциями for-each-ref --sort, представленными в Git 2.0 и 2.8, потому что они теперь применяются к git ls-remote --sort.

Ответ 2

Используете ли вы Linux? Если это так, вы можете использовать эту команду

git ls-remote --tags | grep -o 'refs/tags/dev-[0-9]*\.[0-9]*\.[0-9]*' | sort -r | head | grep -o '[^\/]*$'

Он покажет вам 10 последних тегов (с именем dev-x.y.z)

UPD
Вы можете использовать этот bash script для получения последних тегов:

#!/bin/bash

TAGS=("dev-[0-9]*\.[0-9]*\.[0-9]*" "test-[0-9]*\.[0-9]*\.[0-9]*" "good-[0-9]*" "new [0-9][0-9][0-9]")

for index in ${!TAGS[*]}
do
    git ls-remote --tags | grep -o "refs/tags/${TAGS[$index]}" | sort -rV | head | grep -o '[^\/]*$'
done

Просто добавьте регулярные выражения TAGS массива, которые вы хотите, и вы получите 10 последних тегов для каждого из них. Если вы хотите получить больше или меньше тегов, просто добавьте param -n в головную команду "head -n 5" или "head -n 15".

На всякий случай. Сохраните его в папке ~/bin (например, с именем git_tags), затем добавьте разрешение на выполнение (chmod + x git_tags), это позволит вам запускать этот bash script из любого места (просто введите git_tags).

Ответ 3

какой-то парень сказал мне, что команда:

git ls-remote -t repo.url.git | awk '{print $2}' | cut -d '/' -f 3 | cut -d '^' -f 1  | sort -b -t . -k 1,1nr -k 2,2nr -k 3,3r -k 4,4r -k 5,5r | uniq

и это не лучшее решение, но он открыл глаза на команду sort.

но я хотел бы знать другие версии.

Ответ 4

git ls-remote --tags | awk -F'/' '/[0-9].[0-9].[0-9].*/ { print $3}' | sort -nr | head -n1

Использование github api:

curl https://api.github.com/repos/user/repo/tags | jq '.[] .name' | sort -nr | head -n1

Эти два получат ваш последний тег, вы можете увеличить список, изменив значение на флаг n для головного канала. скажем, чтобы получить 10 самых последних списков head -n10