[英]How to solve git describe --match limitation
我正在使用git describe --long --tags
从 repo 标签自动生成版本字符串。 因此,如果我有1.20标签,我会在我的代码中得到1.20-5-g27ba6e8版本字符串。
现在我只对正则表达式中看起来像^\\d+\\.\\d+$
标签感兴趣(我不想describe
看到任何其他描述性标签)。
git describe
有 --match 开关,如果不是因为匹配是使用 glob 模式完成的,这正是我所需要的。
如何将 glob 模式限制为两个用点分隔的数字(可以有任意数量的数字!)?
如何将 glob 模式限制为两个用点分隔的数字(可以有任意数量的数字!)?
你不能。 最大的问题是 glob 模式不能重复一次或多次最后一个模式,没有像正则表达式那样的+
运算符。 你能做的最接近的是:
[0-9]*.[0-9]*
可悲的是*
匹配任何字符。 bash
shell 通过以+([0-9]).+([0-9])
的形式引入扩展的 glob 解决了这个问题。 但是您可以多次指定--match
并为所有可能的组合(粉扑)生成模式:
# generated with:
# p="[0-9] [0-9][0-9] [0-9][0-9][0-9]"; for i in $p; do for j in $p; do echo "--match \"$i.$j\""; done; done | paste -sd' '
# should handle up numbers up to 3 digits
git describe --long --tags --match "[0-9].[0-9]" --match "[0-9].[0-9][0-9]" --match "[0-9].[0-9][0-9][0-9]" --match "[0-9][0-9].[0-9]" --match "[0-9][0-9].[0-9][0-9]" --match "[0-9][0-9].[0-9][0-9][0-9]" --match "[0-9][0-9][0-9].[0-9]" --match "[0-9][0-9][0-9].[0-9][0-9]" --match "[0-9][0-9][0-9].[0-9][0-9][0-9]"
我还建议为开源做出贡献,并沿着--regexmatch
实现一些东西到git describe
。 另一种方法是自己进行过滤并将标签传回git-describe
来描述它。 在 POSIX shell 中,可能是这样的:
git tag --sort=committerdate | grep '^[0-9]\+\.[0-9]\+$' | tail -n1 | xargs git describe --long --tags --exact-match --match
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.