【发布时间】:2020-03-19 20:54:23
【问题描述】:
我在System.Diagnosticsc.Process 的帮助下完成了一个git pull origin develop,如下所示:
var gitProcess = new Process
{
StartInfo = new ProcessStartInfo
{
UseShellExecute = false,
RedirectStandardOutput = true,
RedirectStandardError = true,
FileName = "git.exe",
Arguments = "pull origin develop",
WorkingDirectory = @"C:\Workspaces\MyRepo",
CreateNoWindow = true,
WindowStyle = ProcessWindowStyle.Hidden
}
};
gitProcess.Start();
string outputString = null;
string errorString = null;
gitProcess.OutputDataReceived += (sender, args) => outputString = string.IsNullOrWhiteSpace(outputString) ? args.Data : $"{outputString}\r\n{args.Data}";
gitProcess.ErrorDataReceived += (sender, args) => errorString = string.IsNullOrWhiteSpace(errorString) ? args.Data : $"{errorString}\r\n{args.Data}";
gitProcess.BeginErrorReadLine();
gitProcess.BeginOutputReadLine();
gitProcess.WaitForExit();
结果是:
gitProcess.ExitCode = 0
outputString = 已经是最新的了。
errorString = 来自https://mycompany.visualstudio.com/MyProject/_git/MyRepo * 分支开发 -> FETCH_HEAD
现在看起来一切正常,但为什么 git.exe 将数据放入 errorString 中?这似乎是正常的信息。这使得错误处理变得困难。 ExitCode 很好,它表明成功。
关于为什么会有错误数据的任何想法,其他几个 git - 命令都会以类似的方式发生这种情况。
预期的答案
我不想听到我不感兴趣的在 c# 中执行 git-pull 的替代方案。我想分别了解 git.exe 的行为 System.Diagnostics.Process 的行为,基本上我想了解产生错误数据的方式和原因。谁对此负责?是 git.exe 还是 System.Diagnostics.Process 的工作方式。
谢谢。
【问题讨论】:
标签: c# git system.diagnostics