繁体   English   中英

如何解决 git describe --match 限制

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM