В Git 2.0 (июнь 2014 г.) вы сможете указать порядок сортировки!
См. Коммит b6de0c6 из коммита 9ef176b , автором которого является Nguy Thn Thái Ngọc Duy ( pclouds
) :
--sort=<type>
Сортировать в определенном порядке .
Поддерживаемый тип:
- "
refname
" (лексикографический порядок),
- "
version:refname
" или " v:refname
" (имена тегов рассматриваются как версии).
Добавьте " -
" к обратному порядку сортировки.
Итак, если у вас есть:
git tag foo1.3 &&
git tag foo1.6 &&
git tag foo1.10
Вот что вы получите:
# lexical sort
git tag -l --sort=refname "foo*"
foo1.10
foo1.3
foo1.6
# version sort
git tag -l --sort=version:refname "foo*"
foo1.3
foo1.6
foo1.10
# reverse version sort
git tag -l --sort=-version:refname "foo*"
foo1.10
foo1.6
foo1.3
# reverse lexical sort
git tag -l --sort=-refname "foo*"
foo1.6
foo1.3
foo1.10
Начиная с фиксации b150794 (Джейкоб Келлер, git 2.1.0, август 2014 г.), вы можете указать этот порядок по умолчанию:
tag.sort
Эта переменная управляет порядком сортировки тегов при отображении git-tag
.
Если не указан параметр " --sort=<value>
", значение этой переменной будет использоваться по умолчанию.
Робинст комментарии :
порядок сортировки версий теперь (Git 2.1+) можно настроить по умолчанию:
git config --global tag.sort version:refname
Как отметил в комментариях Лео Гальегийос :
Чтобы настроить Git на отображение новых тегов первыми (в порядке убывания), просто добавьте дефис перед версией .
Команда становится:
git config --global tag.sort -version:refname
С Git 2.4 (Q2 2015) , переменная конфигурации может использоваться для указания того, что предшествует .versionsort.prerelease
v1.0-pre1
v1.0
См. Коммит f57610a от Junio C Hamano ( gitster
) .
Примечание (см. Ниже) в versionsort.prereleaseSuffix
настоящее время (2017 г.) является устаревшим псевдонимом для versionsort.suffix
.
git 2.7.1 (февраль 2016 г.) сам улучшит результат git tag
.
См. Фиксацию 0571979 (26 января 2016 г.) и фиксацию 1d094db (24 января 2016 г.) Джеффом Кингом ( peff
) .
(Объединено Junio C Hamano - gitster
- в коммите 8bad3de , 1 февраля 2016 г.)
tag
: не показывать неоднозначные имена тегов как " tags/foo
"
Начиная с b7cc53e ( tag.c
: use ' ref-filter
' API, 2015-07-11), git tag
теги с неоднозначными именами (т. Е. Когда существуют и " heads/foo
", и " tags/foo
" существуют) начали показывать как " tags/foo
" вместо просто " foo
".
Это оба:
- бессмысленно; вывод "
git tag
" включает только refs/tags
, поэтому мы знаем, что " foo
" означает тот, который находится в " refs/tags
".
- и неоднозначно; в исходном выводе мы знаем, что строка "
foo
" означает, что " refs/tags/foo
" существует. В новом выводе неясно, имеем ли мы в виду " refs/tags/foo
" или " refs/tags/tags/foo
".
Причина этого в том, что commit b7cc53e переключился git tag
на использование " %(refname:short)
" форматирования вывода ref-filter , которое было адаптировано из for-each-ref
. Этот более общий код не знает, что нас интересуют только теги, и использует его shorten_unambiguous_ref
для получения short-name
.
Нам нужно сказать ему, что нас интересует только " refs/tags/
", и он должен сокращаться по отношению к этому значению.
давайте добавим новый модификатор к языку форматирования " strip
", чтобы удалить определенный набор компонентов префикса.
Это исправляет " git tag
" и позволяет пользователям вызывать одно и то же поведение из своих собственных пользовательских форматов (для " tag
" или " for-each-ref
"), оставляя " :short
" с одинаковым постоянным значением во всех местах.
Если strip=<N>
добавлено, удаляет <N>
компоненты пути, разделенные косой чертой, с начала имени ссылки (например, %(refname:strip=2)
превращается refs/tags/foo
в foo
.
<N>
Должно быть положительным целым числом.
Если отображаемая ссылка имеет меньше компонентов, чем <N>
, команда прерывается с ошибкой.
Если git tag
не указано иное, по умолчанию используется %(refname:strip=2)
.
Обновление Git 2.12 (первый квартал 2017 г.)
См. Фиксацию c026557 , фиксацию b178464 , фиксацию 51acfa9 , фиксацию b823166 , фиксацию 109064a , фиксацию 0c1b487 , фиксацию 9ffda48 , фиксацию eba286e (8 декабря 2016 г.) от SZEDER Gábor ( szeder
) .
(Объединено Junio C Hamano - gitster
- в commit 1ac244d , 23 января 2017 г.)
versionsort.prereleaseSuffix
является устаревшим псевдонимом для versionsort.suffix
.
prereleaseSuffix
Функция сравнения версии, которая используется в « git tag -l
» не правильно , когда два или более prereleases для того же выпуск присутствовал (например , когда 2.0
, 2.0-beta1
и 2.0-beta2
там и потребность кода для сравнения 2.0-beta1
и 2.0-beta2
).
git tag -l --sort=version:refname "rc-*"
и получить желаемый результат. см. мой ответ ниже