Когда я ввожу команду:
git tag -l
Получаю такие результаты:
rc-0.9.0.0
rc-0.9.0.1
rc-0.9.0.10
rc-0.9.0.11
rc-0.9.0.12
rc-0.9.0.2
rc-0.9.0.3
rc-0.9.0.4
rc-0.9.0.5
rc-0.9.0.6
rc-0.9.0.7
rc-0.9.0.8
rc-0.9.0.9
Вместо этого хочу:
rc-0.9.0.0
rc-0.9.0.1
rc-0.9.0.2
rc-0.9.0.3
rc-0.9.0.4
rc-0.9.0.5
rc-0.9.0.6
rc-0.9.0.7
rc-0.9.0.8
rc-0.9.0.9
rc-0.9.0.10
rc-0.9.0.11
rc-0.9.0.12
Как можно отсортировать текущий список, чтобы получить такие результаты?
git tag -l --sort=version:refname "rc-*"
и получить желаемый результат. см. мой ответ ниже--sort
доступно для тега gitОтветы:
Использовать сортировку по версиям
или для версии git> = 2.0
источник
brew install gsort
тогда вы можете изменить строку выше на,git tag -l | gsort -V
и она должна работать на вас.brew install coreutils
чтобы получитьgsort
команду.brew install gsort
не удалось, заявив, что посылка не вызываласьgsort
.В Git 2.0 (июнь 2014 г.) вы сможете указать порядок сортировки!
См. Коммит b6de0c6 из коммита 9ef176b , автором которого является Nguy Thn Thái Ngọc Duy (
pclouds
) :Итак, если у вас есть:
Вот что вы получите:
Начиная с фиксации b150794 (Джейкоб Келлер, git 2.1.0, август 2014 г.), вы можете указать этот порядок по умолчанию:
Робинст комментарии :
Как отметил в комментариях Лео Гальегийос :
С 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 г.)Если
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
.источник
--sort
не существует в git 1.9.1. (работал над 2.0.0)git config --global tag.sort version:refname
sort -V
. Единственное преимущество, которое я вижу, - это переносимость на системы, в которых нет сортировки GNU. Но если есть| sort -V
гольф лучше. Дело в том, что этот метод сортировки не использует никакой информации, специфической для Git (в отличие, например, от топологического порядка объектов, на который указывает stackoverflow.com/questions/6900328/… )Согласно этому ответу , на платформах, которые не поддерживают,
sort -V
например, Windows и OSX, вы можете использоватьgit tag -l | sort -n -t. -k1,1 -k2,2 -k3,3 -k4,4
источник
Объединив ответы уже здесь:
Локальный репозиторий
suffix=-
предотвратит2.0-rc
приход "после"2.0
--sort=-
поместит наивысший номер версии вверху.Удаленный репозиторий
Преимущество этого заключается в том, что никакие объекты не загружаются с удаленного компьютера.
Для получения дополнительной информации см. Этот ответ .
источник
versionsort.suffix
. +1.Чтобы получить обратную сортировку с
sort -V
подходом:источник
Адаптируйте этот Perl-скрипт , который сортирует похожие теги
client_release/7.2/7.2.25
, к вашей конкретной схеме тегов.источник
В итоге я написал простой сценарий оболочки, чтобы упростить эту задачу.
Я сохранил это как
git-tags
в моем$PATH
и запускаюgit tags
всякий раз, когда мне нужно перечислить теги.источник