Car*_*los 12 c# git libgit2sharp
我有这个方法,我从上次提交中获取文件:
static void GetFiles(Tree t, String dir = "")
{
    foreach (TreeEntry treeEntry in t)
    {
        if (treeEntry.TargetType == TreeEntryTargetType.Tree)
        {
            Tree tr = repo.Lookup<Tree>(treeEntry.Target.Sha);
            GetFiles(tr, dir + "/" + treeEntry.Name);
        }
        else
        {
            string caminho = dir + "/" + treeEntry.Path;
            arquivos.Add(caminho);
        }
    }
    return;
}
我看了一下这个问题,但我是C#的新手并且不明白.
我有这个存储库:
c:/teste
| - octocat.txt
| - parentoctocat.txt
| - /outros
| | - octocatblue.txt
| | - octored.txt
我上次提交修改了这些文件:
c:/teste
| - /outros
| | - octocatblue.txt <- This modified
| | - octored.txt <- This new
用我的方法,GetFiles我有所有文件,如在这个打印.如何只获得修改/添加/删除的文件?

如何获得先前的提交并比较获得差异树?
static void CompareTrees()
{
    using (repo)
    {
        Tree commitTree = repo.Head.Tip.Tree; // Main Tree
        Tree parentCommitTree = repo.Head.Tip.Parents.First().Tree; // Secondary Tree
        var patch = repo.Diff.Compare<Patch>(parentCommitTree, commitTree); // Difference
        foreach (var ptc in patch)
        {
            Console.WriteLine(ptc.Status +" -> "+ptc.Path); // Status -> File Path
        }
    }
}

由于git如何在文件系统中存储数据,git commit是提交中包含的所有文件的快照.然后该Tree对象返回存储库的所有文件的状态.
我认为你必须在这个提交的树和前一个树的树之间做差异,我认为应该用这个方法完成 Repository.Diff.Compare()