如何解决如何解决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]"
我还建议为开放源代码做出贡献,并在--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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。