无法获取与Gradle中传递给git describe
的glob匹配的最新git标记。它在终端时工作正常。
我尝试过以下方法:
project.ext.releaseVersionName = "git describe --match \'[0-9]*.[0-9]*.[0-9]*\' --abbrev=0 --tags".execute().text.trim()
和
def getReleaseVersion = { ->
try {
def stdout = new ByteArrayOutputStream()
exec {
commandLine 'bash', '-c', 'git', 'describe', '--match "[0-9]*.[0-9]*.[0-9]*"', '--abbrev=0', 'HEAD'
standardOutput = stdout
}
return stdout.toString().trim()
}
catch (ignored) {
return null
}
}
但是两者都返回空字符串。如果我没有匹配,那么一切正常。我认为这是导致问题的全局。
通过将单个引号中的整个'--match "[0-9]*.[0-9]*.[0-9]*"'
,你基本上传递一个选项与整个字符串。你真正想要的可能是通过--match
选项传递[0-9]*.[0-9]*.[0-9]*
。因此,您应该拆分该参数,以便您的commandLine
变为:
commandLine 'git', 'describe', '--match', '[0-9]*.[0-9]*.[0-9]*', '--abbrev=0', 'HEAD'
或者你可以将--match
参数切换为--arg=value
语法,即像--match=[0-9]*.[0-9]*.[0-9]*
一样使用--abbrev=0
。
我根据评论删除了'bash', '-c'
部分。如果要使用'bash', '-c'
,则其余部分应该是单个字符串,因为它将作为-c
的bash
参数的值。