6

由于不再积极维护 GitSharp,我决定尝试将我的项目从使用 GitSharp 迁移到 LibGit2Sharp。使用 GitSharp,我可以访问在给定分支的情况下签入我的仓库的任何文件的原始字节。我找不到任何有关如何使用 LibGit2Sharp 完成此操作的文档或示例代码。

有人可以给我和如何做到这一点的例子吗?

4

1 回答 1

3

Blob类型公开了一个Content返回 a 的属性byte[]

从BlobFixture.cs文件中提取的以下测试并演示了此属性的用法。

[Test]
public void CanReadBlobContent()
{
    using (var repo = new Repository(BareTestRepoPath))
    {
        var blob = repo.Lookup<Blob>("a8233120f6ad708f843d861ce2b7228ec4e3dec6");
        byte[] bytes = blob.Content;
        bytes.Length.ShouldEqual(10);

        string content = Encoding.UTF8.GetString(bytes);
        content.ShouldEqual("hey there\n");
    }
}

在这个特定的测试中,Blob GitObject 是通过该LookUp()方法直接检索的。您还可以从Filesa 的属性访问 Blob Tree

关于您更具体的请求,以下单元测试应该向您展示如何从Branch.

[Test]
public void CanRetrieveABlobContentFromTheTipOfABranch()
{
    using (var repo = new Repository(BareTestRepoPath))
    {
        Branch branch = repo.Branches["br2"];
        Commit tip = branch.Tip;
        Blob blob = (Blob)tip["README"].Target;
        byte[] content = blob.Content;

        content.Length.ShouldEqual(10);
    }
}

注意:此测试显示了访问 a 的另一种方式Blob(作为 abstract TreeEntry)。因此,使用演员表。

于 2012-01-27T19:05:15.607 回答