2017-06-07 8 views
0

JavaでProcessbuilderを使用してGitLogコマンドを開始しようとしています。Java Process BuilderでGitLogを開始

GitLogコマンド:

のgit --git-DIR = C: --pretty =フォーマットをログ/Users/User/Code/code1/git/.git: "%H \" %AN \ "%ad \"%s \ "" --numstat --date = short

これは私のコードです。パスはgitディレクトリへのパスです。 テストのためにgitディレクトリにgitpathをハードコードしました。

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で、私は常に終了コード128

このプロセス通報は何ですか取得する場合は?

+0

コマンドラインで実行すると、パスワード、sshキーなどの保存された設定が使用されている可能性があります。 gitがスムーズに実行できるように、コードに別のコマンド(たとえば、資格情報を保存する)を実行してみてください。 – Juvanis

答えて

1

ターミナルでコマンドを実行するために、私の場合にはどのような作品それ:

"/ binに/ bashの" - 道あなたのbashに

"-c" は - 次のparamはコマンド

であると述べています

"コマンド" - あなたが端末から実行したい完全なコマンド(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()で、特定のdirからプロセスを開始する場合にも使用できます。

.directory(new File("C:/Users/User/Code/code1/git/")) 
関連する問題