Как получить список последних тегов в удаленном git?
Существует множество методов для получения последних тегов, когда у вас есть локальный репозиторий git.
Но я хочу получить список последних тегов для удаленного репо.
Я знаю о "git ls-remote", и все отлично, когда вы используете теги, такие как x.y.z(где x, y, z - числа).
Но когда теги выглядят как "test-x.y.z" и "dev-x.y.z", я заметил, что большое количество тегов "test" вытаскивает любые новые теги "dev", что неверно.
Итак, как бы вы хотели это решить?
Ответы
Ответ 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