对于上下文,我正在构建一个Jenkins作业来自动git标记我们的分支代码 . 我们的想法是构建一个分支标签命名标准,如下所示:
<latest_tag_in_branch>.<branch_name>.<revision>
让's assume a branch name of ' hotFix '. If the latest tag doesn' t中包含分支名称(例如 2.0.55
),然后我们应该将其附加到修订版1中 .
2.0.55.hotFix.1
如果在此hotFix分支上创建了另一个标记而没有合并到任何其他代码中(因此最新的公共标记不会更改),则会变为:
2.0.55.hotFix.2
如果我们然后与master合并,后者创建了后续标签(例如,假设2.0.58是最新的),那么此分支的下一个版本将“重置”为:
2.0.58.hotFix.1
命令:
git describe --abbrev=0 --tags
会给我最新的标签 . 例如,它将是 2.0.55
或 2.0.55.hotFix.1
. 如何在bash shell环境中继续处理此信息以完成标记名称的其余部分?例如 . 要么追加 <branch_name>.1
,要么将 <revision>
增加1 .
我的代码到目前为止:
> git describe --abbrev=0 --tags
(返回例如2.0.55或2.0.55.hotFix.3)
由于在bash方面相对缺乏经验,我不确定下一步该做什么的最佳方法 .
2 回答
您可以pipe
git
命令的输出到另一个可以操作文本的进程(我更喜欢这里的awk) .这样做是因为它会将输出重定向到
awk
(作为输入) .我们分别通过
-F.
和-v OFS=.
将输入和输出分隔符设置为.
.awk
将运行我们在大括号中提供的脚本 .我们的脚本将检查输入是否有三个参数(在
2.0.55
的情况下) .NF
是一个预定义变量,用于在输入中存储 n 的 n .$0 = $0".hotFix.1"
将.hotFix.1
连接到整个输入(即$0
) .如果输入没有三个参数,我们检查它是否至少有5个参数(
NF >= 5
) . 然后将第五个字段递增1($5 += 1
) .最后,一旦脚本运行完毕,我们通过在结束括号后附加
1
来打印语句 . 请注意,如果输入只有一个或两个字段,则会打印未修改的输入 .请注意,您也可以在一行中编写awk . 我选择在几行上写它,因为它有点可读性 .