我想执行一个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#应用程序中解决它吗?
答案 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,而不必担心创建流程和屏幕抓取输出。