使用Java Process Builder启动GitLog

时间:2017-06-07 08:40:09

标签: java processbuilder git-log

我尝试通过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。

这个过程有什么问题?

1 个答案:

答案 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/"))
相关问题