Groovy 如何从build.gradle执行git命令?

Groovy 如何从build.gradle执行git命令?,groovy,gradle,Groovy,Gradle,你们能解释一下原因吗 def getBuildSuffix() { return 'git rev-list HEAD | wc -l | tr -d " "'.execute().text.trim() } 考虑到从命令行运行git命令时存在数据,不向我返回任何内容: prototype (master) $ git rev-list HEAD | wc -l | tr -d " " 72 可能我只是以错误的方式从我的build.gradle执行了一个git命令?您必须自己执行管道或s

你们能解释一下原因吗

def getBuildSuffix() {
  return 'git rev-list HEAD | wc -l | tr -d " "'.execute().text.trim()
}
考虑到从命令行运行git命令时存在数据,不向我返回任何内容:

prototype (master) $ git rev-list HEAD | wc -l | tr -d " "
72

可能我只是以错误的方式从我的
build.gradle
执行了一个git命令?

您必须自己执行管道或shell调用(请参阅@topr的答案)。请参见错误:

def p1 = 'git rev-list HEAD | wc -l | tr -d " "'.execute()
p1.waitFor()
println p1.exitValue()
//-> 128
println p1.errorStream.text
//-> fatal: ambiguous argument '|': unknown revision or path not in the working tree.
//-> Use '--' to separate paths from revisions, like this:
//-> 'git <command> [<revision>...] -- [<file>...]'
println p1.text 
//-> nothing

管道是一种外壳功能,因此您需要像这样:

['sh', '-c', 'git rev-list HEAD | wc -l | tr -d " "'].execute().text.trim()

如果要为Android执行此操作,则需要
Integer.parseInt()
,如下所示:

Integer.parseInt(['sh','-c','git rev list--all--count']
.execute().text.trim())

['sh', '-c', 'git rev-list HEAD | wc -l | tr -d " "'].execute().text.trim()