Команда Git для поиска предыдущей ветви определенного типа - PullRequest
2 голосов
/ 03 мая 2019

Мы используем gitflow в моей организации, в частности, концепцию веток релизов. Мы также поддерживаем несколько веток одновременного выпуска. Пример репо может выглядеть так:

master -> a
           \
            \    c <-release/v1.0.0    e <-release/v1.1.0    g <-release/v1.2.0
             \  /                     /                     /
    develop-> b ---------------------d---------------------f 

Что я хотел бы сделать, так это получить текущую проверенную ветку релиза, найти ветку релиза предшественника. Например:

-release/v1.2.0 is checked out, return release/v1.1.0
-release/v1.1.0 is checked out, return release/v1.0.0
-release/v1.0.0 is checked out, return nothing, there is no currently active previous release

Мы используем это, чтобы определить, какие файлы изменились между выпусками для развертывания в устаревшей системе.

Допущения: ветви выпуска всегда будут следовать формату release/v.x.y.z, где x, y и z - номера версий. Ветви релизов всегда организованы последовательно на основе этих номеров версий. v1.2.1 > v1.2.0 и v1.2.0 > 1.1.0

Я подумал об использовании некоторой комбинации git branch --list -a *release/v* для получения списка всех веток релиза и некоторых команд perl для сортировки результатов, но мне было интересно, есть ли какие-нибудь команды git вдоль вены git rev-parse или git rev-list это могло бы сделать это.

Примечания: я использую z / OS USS-порты инструментов Unix, git, bash, grep и т. Д.

Ответы [ 2 ]

2 голосов
/ 03 мая 2019

Сначала проверьте, может ли (с последним Git 2.21) порядок сортировки для тегов использоваться для ветвей:

git branch --sort=version:refname

Таким образом, вы можете получить правильный порядок перед git grepping.

Патрик OP упоминает в комментариях , используя:

git branch --list -r *release/v* --sort=-version:refname
1 голос
/ 03 мая 2019

Не существует специфической для git команды, но вам не нужно привлекать Perl, стандартная сортировка bash должна сделать работу:

git branch --list -a *release/v* | sort -V | grep -B1 <current_version> | head -1

(обратите внимание на опцию -V -> man)

Также обратите внимание, что вы не можете даже получить название текущей ветви без некоторой обработки текста.Смотрите ответы на этот вопрос здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...