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

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

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

1 ответ

Решение

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");
    }
}

В этом конкретном тесте Blob GitObject напрямую извлекается через LookUp() метод. Вы также можете получить доступ к Blobs из Files свойство 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);
    }
}

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

Другие вопросы по тегам