Запуск git fetch в командном файле через процесс c # зависает - PullRequest
0 голосов
/ 01 февраля 2019

Я пытаюсь запустить несколько команд git через c # и продолжаю работать с полученными результатами.

Я написал этот маленький метод для работы с:

private string runGitCommand(string gitCommand, string path)
    {
        ProcessStartInfo processInfo = new ProcessStartInfo();
        processInfo.FileName = System.Windows.Forms.Application.StartupPath+"\\gitcommand.bat";
        processInfo.WindowStyle = ProcessWindowStyle.Hidden;
        processInfo.Arguments = gitCommand;
        processInfo.CreateNoWindow = true;
        processInfo.UseShellExecute = false;
        processInfo.WorkingDirectory = path;
        processInfo.RedirectStandardError = true;
        processInfo.RedirectStandardOutput = true;
        Process process = new Process();
        process.StartInfo = processInfo;
        string output="";
        process.OutputDataReceived += (a, b) => {
            Console.WriteLine(b.Data);
            output += b.Data;
        }
        ;
        process.ErrorDataReceived += (a, b) => Console.WriteLine(b.Data);
        process.Start();
        process.BeginErrorReadLine();
        process.BeginOutputReadLine();
        process.WaitForExit();

        return output;
    }

Конечно, некоторыенастройки для отладки (как ненужные Console.WriteLine()), но он работает с большинством команд git, таких как status или rev-parse HEAD.

Это мой пакетный файл, который я использую:

@"C:/Program Files (x86)/Git/bin/git.exe" %1 %2

Есть два аргумента, поскольку rev-parse HEAD это два аргумента.У меня нет проблем с выполнением status, так что двойные аргументы не должны быть проблемой.

Все работает точно так, как задумано, но когда я выполняю fetch, программа зависает.

Я использовал командный файл в cmd с теми же входными данными, и он занял свое время (около 1-2 секунд), но он вышел без каких-либо проблем (там не было никакого вывода).

есть мысли?

1 Ответ

0 голосов
/ 01 февраля 2019

Проблема была в неработающей аутентификации RSA.Поскольку git fetch связывается с сервером, а git status нет, эту ошибку можно увидеть, только набрав вручную использованные команды в cmd (не git bash).

Программа ожидала ввода данных пользователем.Как предполагает @ardila, использование lib2git должно использоваться для надежного использования git в C #.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...