Запустите GitLog с помощью Java Process Builder

Я пытаюсь запустить команду GitLog через Processbuilder на Java.

Команда Гитлога:

git --git-dir=C:/Users/User/Code/code1/git/.git log --pretty=format:"%H \"%an\" %ad \"%s\"" --numstat --date=короткий

Это мой код. Путь — это путь к каталогу git. Я жестко закодировал gitpath в каталог git для тестирования.

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.

В чем проблема с этим процессом?


person Drextor    schedule 07.06.2017    source источник
comment
когда вы запускаете его через командную строку, вы, вероятно, используете некоторые сохраненные настройки, такие как пароль, ключ ssh. попробуйте запустить другую команду (например, чтобы сохранить учетные данные) в своем коде, чтобы убедиться, что git работает без сбоев.   -  person Juvanis    schedule 07.06.2017
comment
вы решили свой случай, я столкнулся с той же ошибкой с той же командой в linux @Drextor   -  person user63898    schedule 13.02.2019


Ответы (1)


Это то, что работает в моем случае для запуска команд в терминале:

/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/"))
person Vitaliy Moskalyuk    schedule 07.06.2017