我们在我的组织中使用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 rev-parse或git rev-list的git命令可以做到这一点。
注意:我使用的是unix工具的z/OS USS端口,git,bash,grep等。
发布于 2019-05-03 12:41:07
首先检查(使用最新的Git2.21) sort order for tags是否可以用于分支:
git branch --sort=version:refname这样,您就可以在git grepping之前获得正确的订单。
OP patrickw使用以下方式提到in the comments:
git branch --list -r *release/v* --sort=-version:refname发布于 2019-05-03 06:04:20
没有特定于git的命令,但是您不需要涉及Perl,标准的bash排序应该可以完成这项工作:
git branch --list -a *release/v* | sort -V | grep -B1 <current_version> | head -1(请注意-V选项->man)
还要注意的是,如果不进行一些文本处理,您甚至无法获得当前分支的名称。请参阅此问题的答案here。
https://stackoverflow.com/questions/55960686
复制相似问题