我尝试通过Java中的Processbuilder启动GitLog命令。
GitLog命令:
git --git-dir = C:/Users/User/Code/code1/git/.git log --pretty = format:"%H \"%an \" %ad \"%s \"" --numstat --date = short
这是我的代码。 Path是git目录的路径。 我将gitpath硬编码到git dir进行测试。
public void createGitLog( Path path ) {
try
{
String gitpath = "--git-dir=C:/Users/User/Code/code1/git/.git";
String options = "--pretty=format:\"%H \\\"%an\\\" %ad \\\"%s\\\"\" --numstat --date=short";
ProcessBuilder builder = new ProcessBuilder("git", gitpath, "log", options );
Process process = builder.start();
builder.redirectOutput(ProcessBuilder.Redirect.to( path.resolve("gitlog.dat").toFile() ) );
int exitValue = process.waitFor();
if ( exitValue != 0 )
{
// throw
}
}
catch (IOException e) {
}
}
如果我在cmd中尝试此命令,它可以工作,但在Java中我总是得到exitcode 128。
这个过程有什么问题?
答案 0 :(得分:2)
在我的情况下,在终端中运行命令是有效的:
“/ bin / bash” - bash的路径
“ - c” - 表示下一个参数是命令
“command” - 要从终端执行的完整命令(如
git log --pretty=format:"%H \"%an\" %ad \"%s\"" --numstat --date=short
)
String command = "git " + gitpath + " log " + options;
ProcessBuilder builder = new ProcessBuilder("/bin/bash" , "-c" , command);
如果要从特定目录开始处理,也可以在ProcessBuilder directory()
上使用;
.directory(new File("C:/Users/User/Code/code1/git/"))