微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何解决git describe --match限制

如何解决如何解决git describe --match限制

我正在使用git describe --long --tags通过回购代码自动生成版本字符串。这样,如果我有 1.20 标记,我的代码中就会得到 1.20-5-g27ba6e8 版本字符串。

现在,我只对在正则表达式中看起来像^\d+\.\d+$标签感兴趣(我不希望describe看到任何其他描述性标签)。

git describe具有--match开关,如果不是使用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]"

我还建议为开放源代码做出贡献,并在--regexmatchgit describe之间实施一些东西。另一种方法是自己进行过滤,然后将标记传递回git-describe进行描述。在POSIX shell中,可能是这样的:

git tag --sort=committerdate | grep '^[0-9]\+\.[0-9]\+$' | tail -n1 | xargs git describe --long --tags --exact-match --match

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。