我花了最多的时间来尝试如何从Gradle中运行shell命令,因为看来Gradle很难做到这一点。
这是命令:
git branch --merged | grep -v \* | grep -v master | grep -v develop | grep -v dmz | xargs git branch -D
这只是清理已合并的本地分支的便捷命令。
这是我创建的任务:
task gitCleanLocalBranches {
doLast {
exec {
workingDir '.'
commandLine 'git branch --merged | grep -v \\* | grep -v master | grep -v develop | grep -v dmz | xargs git branch -D'
}
}
}
任务失败,并显示:
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':gitCleanLocalBranches'.
> A problem occurred starting process 'command 'git branch -a''
* Try:
Run with --info or --debug option to get more log output.
* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':gitCleanLocalBranches'.
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:100)
...
Caused by: org.gradle.process.internal.ExecException: A problem occurred starting process 'command 'git branch --merged | grep -v \* | grep -v master | grep -v develop | grep -v dmz | xargs git branch -D''
at org.gradle.process.internal.DefaultExecHandle.execExceptionFor(DefaultExecHandle.java:222)
... 3 more
Caused by: net.rubygrapefruit.platform.NativeException: Could not start 'git branch --merged | grep -v \* | grep -v master | grep -v develop | grep -v dmz | xargs git branch -D'
at net.rubygrapefruit.platform.internal.DefaultProcessLauncher.start(DefaultProcessLauncher.java:27)
... 4 more
Caused by: java.io.IOException: Cannot run program "git branch --merged | grep -v \* | grep -v master | grep -v develop | grep -v dmz | xargs git branch -D" (in directory "/home/wlaw/sterlib"): error=2, No such file or directory
at net.rubygrapefruit.platform.internal.DefaultProcessLauncher.start(DefaultProcessLauncher.java:25)
... 6 more
Caused by: java.io.IOException: error=2, No such file or directory
... 7 more
因此,我认为该命令过于复杂,因此尝试了一些更简单的方法,然后更改commandLine
为:
commandLine 'git branch -a'
但是我得到了完全一样的错误。为什么Gradle无法在PATH
环境变量中找到任何内容?
要执行的命令及其参数必须是要传递给的单独参数commandLine
,如下所示:
commandLine 'git', 'branch', '-a'
如果要像第一个示例一样执行复杂的管道,则可以将其包装在Shell脚本中。
我无法对此进行测试,但是我认为这也应该起作用:
commandLine 'sh', '-c', 'git branch --merged | grep -v -e \* -e master -e develop -e dmz | xargs git branch -D'
注意:我自由了一些,并简化grep
了一点。
最后,您还可以在其中创建一个Git别名.gitconfig
来包装复杂的管道。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句