Git命令查找特定类型的上一个分支

时间:2019-05-02 21:47:46

标签: git

我们在组织内部使用gitflow,尤其是发布分支的概念。我们还支持多个同时发布的分支。示例回购可能看起来像这样:

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

我想做的是给一个当前已签出的release分支,找到先前的release分支。例如:

-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分支将始终遵循格式release/v.x.y.z,其中x,y和z是版本号。发行分支始终根据这些版本号顺序组织。 v1.2.1 > v1.2.0v1.2.0 > 1.1.0

我考虑使用git branch --list -a *release/v*的某种组合来获取所有发行分支的列表,以及一些perl命令来对结果进行排序,但是我想知道在git rev-parse的脉络中是否有一些git命令或git rev-list可以做到的。

注意:我正在使用unix工具的z / OS USS端口,gi​​t,bash,grep等。

2 个答案:

答案 0 :(得分:2)

首先(在最新的Git 2.21中)检查sort order for tags是否可用于分支:

git branch --sort=version:refname

这样,您可以在git grepping之前获得正确的顺序。

答案 1 :(得分:1)

没有特定于git的命令,但是您不需要涉及Perl,标准bash排序应该可以完成工作:

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

(请注意-V选项-> man

还请注意,如果不进行一些文本处理,您甚至无法获得当前分支的名称。查看此问题的答案here