簡體   English   中英

如何使用LibGit2Sharp在Git上獲取文件內容?

[英]How to get file's contents on Git using LibGit2Sharp?

我檢查了BlobFixture.cs代碼,發現了一些關於讀取文件內容的測試,如下所示。

using (var repo = new Repository(BareTestRepoPath))
{
    var blob = repo.Lookup<Blob>("a8233120f6ad708f843d861ce2b7228ec4e3dec6");

    var contentStream = blob.GetContentStream();
    Assert.Equal(blob.Size, contentStream.Length);

    using (var tr = new StreamReader(contentStream, Encoding.UTF8))
    {
        string content = tr.ReadToEnd();
        Assert.Equal("hey there\n", content);
    }
}

但我找不到根據文件名獲取文件內容的測試。 是否有可能這樣做,如果是這樣的話?

每個Tree擁有一個TreeEntry集合。 一個TreeEntry保存有關的一些指向元數據(名稱,模式,OID,...) GitObject GitObject可以通過訪問Target一的財產TreeEntry實例。

大多數情況下, TreeEntry將指向Blob或另一Tree

Tree類型公開了一個索引器,它接受一個路徑來輕松檢索最終指向TreeEntry 作為一種便捷方法, Commit公開了這樣的索引器。

因此,您的代碼可以這種方式表達。

using (var repo = new Repository(BareTestRepoPath))
{
    var commit = repo.Lookup<Commit>("deadbeefcafe"); // or any other way to retreive a specific commit
    var treeEntry = commit["path/to/my/file.txt");

    Debug.Assert(treeEntry.TargetType == TreeEntryTargetType.Blob);
    var blob = (Blob)treeEntry.Target;

    var contentStream = blob.GetContentStream();
    Assert.Equal(blob.Size, contentStream.Length);

    using (var tr = new StreamReader(contentStream, Encoding.UTF8))
    {
        string content = tr.ReadToEnd();
        Assert.Equal("hey there\n", content);
    }
}

暫無
暫無

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

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