簡體   English   中英

從LibGit2Sharp中的提交中獲取已修改/添加/刪除的文件

[英]Get files modified/added/removed from a commit in 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()來完成。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM