Obtener files modificados / agregados / eliminados de una confirmación en LibGit2Sharp

Tengo este método, donde obtengo los files de mi última confirmación:

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

Eché un vistazo a esta pregunta , pero soy novato con C # y no entiendo.

Tengo este repository

 c:/teste | - octocat.txt | - parentoctocat.txt | - /outros | | - octocatblue.txt | | - octonetworking.txt 

Mi última confirmación ha modificado estos files:

 c:/teste | - /outros | | - octocatblue.txt <- This modified | | - octonetworking.txt <- This new 

Con mi método GetFiles tengo todos los files como en esta printing. ¿Cómo get solo los files modificados / agregados / eliminados?

Ejecución del programa


¿Cómo puedo get el compromiso anterior y comparar get el tree de la diferencia?


Solución

 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<Patch>(parentCommitTree, commitTree); // Difference foreach (var ptc in patch) { Console.WriteLine(ptc.Status +" -> "+ptc.Path); // Status -> File Path } } } 

Solución

Debido a la forma en que git almacena los datos en los filesystems, una confirmación de git es una instantánea de todos los files contenidos en la confirmación. Luego, el object Tree devuelve el estado de todos los files del repository.

Creo que debes hacer la diferencia entre el tree de este commit y el tree del anterior y creo que debería hacerse con el método Repository.Diff.Compare()