【问题标题】:Git diff - path is outside repositoryGit diff - 路径在存储库之外
【发布时间】:2017-12-23 00:35:00
【问题描述】:

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

git diff HEAD -- "文件夹\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# 应用程序中解决它?

【问题讨论】:

  • 根本不是 Windows 用户,但是:git diff HEAD -- Folder\TestFile.cs 使用相对路径,所以当您从命令行运行它时,您可能位于相关目录中,但在您的应用程序中执行它时不是?

标签: c# git


【解决方案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,而不必担心进程创建和屏幕抓取输出。

【讨论】:

    猜你喜欢
    • 2011-08-03
    • 1970-01-01
    • 2012-08-09
    • 1970-01-01
    • 1970-01-01
    • 2014-05-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多