2012-01-27 4 views
6

Postanowiłem spróbować przenieść mój projekt z GitSharp do LibGit2Sharp, ponieważ GitSharp nie jest już aktywnie konserwowany. Dzięki GitSharp udało mi się uzyskać dostęp do surowych bajtów dowolnego pliku sprawdzonego w moim repo otrzymanym od oddziału. Nie mogę zlokalizować żadnej dokumentacji ani przykładowego kodu jak to zrobić za pomocą LibGit2Sharp.Jak mogę uzyskać dane binarne plików z repozytorium Git za pomocą LibGit2Sharp?

Czy ktoś może mi podać i przykład tego, jak to się robi?

Odpowiedz

3

Typ Blob udostępnia właściwość Content, która zwraca wartość byte[].

Poniższy test wyodrębniony z pliku BlobFixture.cs i demonstruje użycie tej właściwości.

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

W omawianym teście, blob GitObject jest bezpośrednio pobierane za pomocą metody LookUp(). Możesz także uzyskać dostęp do obiektów Blobs z właściwości Files z Tree.

Jeśli chodzi o bardziej szczegółowe żądanie, następujący test jednostki powinien pokazać jak uzyskać dostęp do surowych bajtów obiektu Blob z końcówki 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); 
    } 
} 

Uwaga: Ten test pokazuje inny sposób dostępu do Blob (jako abstrakcyjne TreeEntry). Tak więc wykorzystanie obsady.

+0

Awesome. Dzięki stary! – Nick

+0

Cieszę się, że mogłem ci pomóc :) – nulltoken

+0

Również .. oglądanie testów to dobry pomysł. – Nick