2015-05-13 8 views
7

ho questo metodo, dove ottengo i file dal mio ultimo impegno:ottenere i file modificati/aggiunti/rimosso da un commit nel 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; 
} 

ho fatto uno sguardo su this question, ma io sono newbie con C# e non capisco.

ho questo repository:

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

miei ultimi commettere avere questo file modificati:

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

Con il mio metodo GetFiles ho tutti i file come in questa stampa. Come ottenere solo i file modificati/aggiunti/rimossi?

Program execution


Come posso ottenere il commit precedente e confrontare ottenendo l'albero della differenza?


Soluzione

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

Solution

risposta

4

A causa di come git archivio dati nei file system, un git commit è un'istantanea di tutti i file contenuti nel commettere. Quindi l'oggetto Tree restituisce lo stato di tutti i file del repository.

penso che si deve fare il diff tra l'albero di questo impegno e l'albero di quello precedente e credo che dovrebbe essere fatto con il metodo Repository.Diff.Compare()

+0

Potete aiutarmi a cambiare il mio metodo 'GetFiles' per Fai questo? – Carlos

Problemi correlati