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

时间:2019-03-26 12:24:47

标签: c# git libgit2 libgit2sharp

我需要获得master和developer特定目录的完整区别,以便我可以解析它并创建易于阅读的变更日志。

我想用libgit2sharp复制“ git diff --unified = 0主目录/> 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也许是一种更干净的方法。我没有适用于PowerShell的.Net Core 2.0。

2 个答案:

答案 0 :(得分:0)

默认补丁是统一格式

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

答案 1 :(得分: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();