Git diff - path在存储库外部

时间:2017-12-22 14:16:34

标签: c# git

我想执行一个git diff命令。以下命令导致“致命 - 路径在存储库外”错误。它使用Process类在C#应用程序中实现。

  

git diff HEAD - “Folder \ TestFile.cs”>   “C:\ Users \用户名称\应用程序数据\本地\ TEMP \ tmpEA7C.diff”

     

致命:C:\ Users \ Name \ AppData \ Local \ Temp \ tmpEA7C.diff:   C:\ Users \ Name \ AppData \ Local \ Temp \ tmpEA7C.diff在存储库外。

命令'有效',因为我可以在命令提示符(cmd)中成功执行它。

你能解释一下该命令的问题以及如何在C#应用程序中解决它吗?

1 个答案:

答案 0 :(得分:1)

您似乎正在尝试将标准输出重定向到文件。重定向由 shell 处理,Process类不支持它。相反,它将> C:\Users\Name\AppData\Local\Temp\tmpEA7C.diff传递给git进程。这就是为什么git抱怨路径C:\Users\Name\AppData\Local\Temp\tmpEA7C.diff不在存储库中。

如果您正在调用某个流程并希望阅读其标准输出,那么您有责任这样做。

您可以使用Process类捕获输出。例如:

var proc = new Process {
    StartInfo = new ProcessStartInfo {
        FileName = "git.exe",
        Arguments = "diff HEAD -- "Folder\TestFile.cs"",
        UseShellExecute = false,
        RedirectStandardOutput = true,
        CreateNoWindow = true
    }
};

proc.Start();

while (!proc.StandardOutput.EndOfStream) {
    var line = proc.StandardOutput.ReadLine();
}

当然,您也可以使用LibGit2Sharp,而不必担心创建流程和屏幕抓取输出。