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

我有这个方法,我从上次提交中获取文件:

static void GetFiles(Tree t, String dir = "") { foreach (TreeEntry treeEntry in t) { if (treeEntry.TargetType == TreeEntryTargetType.Tree) { Tree tr = repo.Lookup(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.Single().Tree; // Secondary Tree var patch = repo.Diff.Compare(parentCommitTree, commitTree); // Difference foreach (var ptc in patch) { Console.WriteLine(ptc.Status +" -> "+ptc.Path); // Status -> File Path } } } 

解

由于git如何在文件系统中存储数据,git commit是提交中包含的所有文件的快照。 然后Tree对象返回存储库的所有文件的状态。

我认为你必须在这个提交的树和前一个树的树之间做差异,我认为它应该用方法Repository.Diff.Compare()来完成。