我正在努力弄清楚如何从Gradle运行shell命令,因为看起来Gradle使得它很难做到这一点.
这是命令:
git branch --merged | grep -v \* | grep -v master | grep -v develop | grep -v dmz | xargs git branch -D
Run Code Online (Sandbox Code Playgroud)
这只是一个方便的命令来清理已经合并的本地分支.
这是我创建的任务:
task gitCleanLocalBranches {
doLast {
exec {
workingDir '.'
commandLine 'git branch --merged | grep -v \\* | grep -v master | grep -v develop | grep -v dmz | xargs git branch -D'
}
}
}
Run Code Online (Sandbox Code Playgroud)
任务失败:
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
Run Code Online (Sandbox Code Playgroud)
所以我认为命令太复杂所以我尝试了一些更简单的东西,并改为commandLine:
commandLine 'git branch -a'
Run Code Online (Sandbox Code Playgroud)
但我得到了完全相同的错误.为什么Gradle无法在PATH环境变量中找到任何内容?
Sto*_*ica 15
要执行的命令及其参数必须是要传递的单独参数commandLine,如下所示:
commandLine 'git', 'branch', '-a'
Run Code Online (Sandbox Code Playgroud)
如果要像第一个示例中那样执行复杂的管道,可以将其包装在shell脚本中.
我无法测试这个,但我认为这也应该有效:
commandLine 'sh', '-c', 'git branch --merged | grep -v -e \* -e master -e develop -e dmz | xargs git branch -D'
Run Code Online (Sandbox Code Playgroud)
注意:我冒昧并简化grep了一下.
最后,您还可以在自己中创建一个Git别名.gitconfig来包装复杂的管道.
aug*_*490 10
如果您需要保存命令输出,可以这样做:
def gitBranchA = "git branch -a".execute().text.trim()
Run Code Online (Sandbox Code Playgroud)