通过C#进程在批处理文件中运行git fetch挂断

时间:2019-02-01 09:53:22

标签: c# git batch-file

我正在尝试通过c#运行多个git命令,并继续使用结果输出。

我写了这个小方法来使用:

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命令(例如statusrev-parse HEAD)一起使用。

这是我使用的批处理文件:

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

有两个自变量,因为rev-parse HEAD是两个自变量。 我在执行status时没有任何问题,所以这个双重参数不应该成为问题。

一切正常,但是我执行fetch时,程序挂断了。

我在cmd中使用了具有相同输入的批处理文件,它花了时间(大约1-2秒),但是它退出时没有任何问题(那里没有输出)。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

问题是无法使用RSA身份验证。 由于git fetch与服务器联系,而git status没有与服务器联系,因此只能通过在cmd中手动键入使用的命令(而不是git bash)才能看到此错误。

程序正在等待用户输入。如@ardila所建议,lib2git的使用应在C#中可靠地使用git。