Я пытаюсь запустить несколько команд 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 секунд), но он вышел без каких-либо проблем (там не было никакого вывода).
есть мысли?