如何解决git describe --match的匹配限制,匹配点分隔数字标签
解决git describe匹配纯数字版本标签的问题
刚好碰到过类似的需求,我来给你捋捋怎么用glob模式精准匹配^\d+\.\d+$格式的标签(也就是纯数字、点分隔的两位版本号,比如1.20)。
核心思路:用基本glob实现正则\d+\.\d+的匹配
git的--match选项用的是shell风格的glob模式,不像正则有+这种量词,但我们可以用基础语法组合出效果:
正确的glob模式是:[0-9][0-9]*.[0-9][0-9]*
拆解一下这个模式:
[0-9]:匹配单个数字,保证版本号的每一部分至少有一位数字[0-9]*:匹配零个或多个后续数字,支持多位数的版本号(比如123.456).:匹配字面意义的点分隔符(glob里.不需要转义)- 后半段
[0-9][0-9]*和前半段逻辑一致,确保点右边也是至少一位数字的版本号
完整命令示例
把模式用单引号括起来(避免shell解析方括号),最终命令:
git describe --long --tags --match '[0-9][0-9]*.[0-9][0-9]*'
这个命令会只识别符合数字.数字格式的标签,像v1.21、1.2-beta这类带前缀或后缀的标签都会被忽略,完美符合你的需求。
进阶:用extglob简化模式(兼容性稍弱)
如果你的git环境支持扩展glob(extglob,大部分现代git都支持),可以用更贴近正则的写法:+([0-9]).+([0-9]),其中+([0-9])直接匹配一个或多个数字,和正则的\d+完全对应。命令如下:
git describe --long --tags --match '+([0-9]).+([0-9])'
同样要记得用单引号包裹模式,防止shell解析特殊字符。
内容的提问来源于stack exchange,提问作者jackhab
相关产品推荐
相关产品推荐

