Git diff - path在存储库外部

问题描述 投票:0回答:1

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

git diff HEAD - “Folder \ TestFile.cs”>“C:\ Users \ Name \ AppData \ Local \ Temp \ tmpEA7C.diff”

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

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

你能解释一下这个命令有什么问题,以及如何在C#应用程序中解决它?

c# git
1个回答
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而不必担心进程创建和屏幕抓取输出。

© www.soinside.com 2019 - 2024. All rights reserved.