我正在尝试通过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命令(例如status
或rev-parse HEAD
)一起使用。
这是我使用的批处理文件:
@"C:/Program Files (x86)/Git/bin/git.exe" %1 %2
有两个自变量,因为rev-parse HEAD
是两个自变量。
我在执行status
时没有任何问题,所以这个双重参数不应该成为问题。
一切正常,但是我执行fetch
时,程序挂断了。
我在cmd中使用了具有相同输入的批处理文件,它花了时间(大约1-2秒),但是它退出时没有任何问题(那里没有输出)。
有什么想法吗?
答案 0 :(得分:1)
问题是无法使用RSA身份验证。
由于git fetch
与服务器联系,而git status
没有与服务器联系,因此只能通过在cmd中手动键入使用的命令(而不是git bash)才能看到此错误。
程序正在等待用户输入。如@ardila所建议,lib2git的使用应在C#中可靠地使用git。