2012-01-27 27 views
6

Tôi đã quyết định thử và di chuyển dự án của mình từ việc sử dụng GitSharp sang LibGit2Sharp vì GitSharp không còn được duy trì tích cực nữa. Với GitSharp tôi đã có thể truy cập các byte thô của bất kỳ tệp nào được kiểm tra trong repo của tôi cho một nhánh. Tôi không thể tìm thấy bất kỳ tài liệu hoặc mã ví dụ về cách thức này được thực hiện bằng cách sử dụng LibGit2Sharp.Làm cách nào để lấy dữ liệu tệp nhị phân ra khỏi kho lưu trữ Git bằng LibGit2Sharp?

Ai đó có thể cho tôi và ví dụ về cách thực hiện việc này?

Trả lời

3

Loại Blob thể hiện một thuộc tính Content trả về byte[].

Thử nghiệm sau đây được trích xuất từ ​​tệp BlobFixture.cs và chứng minh việc sử dụng thuộc tính này.

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

Trong thử nghiệm đặc biệt này, các Blob GitObject được lấy trực tiếp thông qua các phương pháp LookUp(). Bạn cũng có thể truy cập Blobs từ thuộc tính Files của số Tree.

Về yêu cầu cụ thể hơn của bạn, kiểm tra đơn vị sau đây sẽ hiển thị cho bạn cách truy cập byte thô của Blob từ đầu số 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); 
    } 
} 

Lưu ý: thử nghiệm này cho thấy một cách khác để truy cập vào một Blob (như một bản tóm tắt TreeEntry). Vì vậy, việc sử dụng các diễn viên.

+0

Tuyệt vời. Cảm ơn anh bạn! – Nick

+0

Vui vì tôi đã có thể giúp bạn :) – nulltoken

+0

Ngoài ra .. xem các bài kiểm tra là một ý tưởng hay. – Nick

Các vấn đề liên quan