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

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

我需要获取master之间的完全差异并为特定目录开发,所以我可以解析它并创建一个易于阅读的更改日志。

我想用libgit2sharp复制“git diff --unified = 0 master directory /> file.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是一种更清洁的方法。我没有.Net Core 2.0 for PowerShell。

c# git libgit2 libgit2sharp
2个回答
0
投票

默认情况下,补丁是统一格式

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

0
投票

我用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();
© www.soinside.com 2019 - 2024. All rights reserved.