从LibGit2Sharp提交中获取修改/添加/删除的文件

16

我有一个方法,可以获取上次提交后的文件:

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
        }
    }
}

Solution

1个回答

6
由于git在文件系统中存储数据的方式,一个git提交是包含在提交中所有文件的快照。然后Tree对象会返回存储库中所有文件的状态。
我认为你必须对此提交的树和前一个提交的树进行差异比较,这应该使用Repository.Diff.Compare()方法完成。

你能帮我修改一下我的 GetFiles 方法来实现这个吗? - Carlos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接