使用 libgit2sharp 获取特定目录的 master 和 develop 之间的差异

Getting diff between master and develop for a specific directory with libgit2sharp

我需要获取特定目录的 master 和 develop 之间的完整差异,以便我可以解析它并创建一个易于阅读的变更日志。

我想用 libgit2sharp 复制 "git diff --unified=0 master directory/ >file.diff"。我设法获得了所有 modified/added/deleted 文件的列表,但我不知道如何获得每个文件的 diff 内容。

using (var repo = new Repository("C:\dev\myProject"))
{
    var changes = repo.Diff.Compare<TreeChanges>(repo.Branches["master"].TrackedBranch.Tip.Tree,
        DiffTargets.WorkingDirectory);

    foreach (var changed in changes.Modified)
    {
        if (changed.Path.Contains("directory"))
        {
            Console.WriteLine("modified:" + changed.Path);
        }
    }
}

我想要类似于实际 git 命令的内容,以便我可以对其进行解析。另一种解决方案是使用 "Process.Start",但 libgit2sharp 可能是一种更简洁的方法。我没有用于 PowerShell 的 .Net Core 2.0。

补丁默认统一格式

git diff master..develop <directory> > output.diff

我使用 Process.Start 解决了它。我仍然对 libgit2sharp 解决方案感兴趣。提示:1252 编码在标准 .Net Core 中不起作用。

const string command = "git";
const string directory = "C:\dev\myProject";
const string arguments = "diff --unified=0 master directory/";

var startInfo = new ProcessStartInfo
{
    WorkingDirectory = directory,
    FileName = command,
    Arguments = arguments,
    StandardOutputEncoding = Encoding.GetEncoding(1252),
    UseShellExecute = false,
    RedirectStandardOutput = true
};

var cmd = Process.Start(startInfo);

var sr = cmd?.StandardOutput;
var output = sr?.ReadToEnd();
cmd?.WaitForExit();