2012-01-27 58 views
6

由於GitSharp不再被主動維護,我決定嘗試將我的項目從使用GitSharp遷移到LibGit2Sharp。使用GitSharp,我能夠訪問任何文件的原始字節,並將其簽入分支。我找不到任何文檔或示例代碼如何使用LibGit2Sharp完成此操作。如何使用LibGit2Sharp從Git存儲庫中獲取文件二進制數據?

有人可以給我和如何做到這一點的例子嗎?

回答

3

Blob類型公開屬性,該屬性返回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"); 
    } 
} 

在這個特定的測試中,通過LookUp()方法直接檢索Blob GitObject。您還可以訪問TreeFiles屬性中的Blob。

關於更具體的請求,下面的單元測試應該告訴你如何從Branch的頂端訪問Blob的原始字節。

[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)的另一方式。因此,演員的使用​​。

+0

太棒了。多謝,夥計! – Nick 2012-01-27 19:27:33

+0

很高興我已經能夠幫助你:) – nulltoken 2012-01-27 19:47:43

+0

另外..查看測試是一個好主意。 – Nick 2012-01-27 19:57:25

相關問題