Как я могу получить двоичные данные файла из репозитория Git, используя LibGit2Sharp? - PullRequest
6 голосов
/ 27 января 2012

Я решил попробовать перенести свой проект с GitSharp на LibGit2Sharp, поскольку GitSharp больше не поддерживается.С GitSharp я смог получить доступ к необработанным байтам любого файла, зарегистрированного в моем репо, с учетом ветки.Я не могу найти какую-либо документацию или пример кода того, как это делается с помощью LibGit2Sharp.

Может кто-нибудь дать мне пример того, как это делается?

1 Ответ

3 голосов
/ 27 января 2012

Тип Blob предоставляет свойство Content, которое возвращает 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");
    }
}

В этом конкретном тесте объект GitObject Blob напрямую извлекается методом LookUp().Вы также можете получить доступ к BLOB-объектам из свойства Files Tree.

Что касается вашего более конкретного запроса, следующий модульный тест должен показать вам , как получить доступ к необработанным байтам BLOB-объекта изtip of 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);
    }
}

Примечание: Этот тест показывает еще один способ доступа к Blob (в качестве абстрактного TreeEntry).Таким образом, использование броска.

...