![](/img/trans.png)
[英]How can I get file binary data out of Git repository using LibGit2Sharp?
[英]How to get file's contents on Git using LibGit2Sharp?
我檢查了BlobFixture.cs
代碼,發現了一些關於讀取文件內容的測試,如下所示。
using (var repo = new Repository(BareTestRepoPath))
{
var blob = repo.Lookup<Blob>("a8233120f6ad708f843d861ce2b7228ec4e3dec6");
var contentStream = blob.GetContentStream();
Assert.Equal(blob.Size, contentStream.Length);
using (var tr = new StreamReader(contentStream, Encoding.UTF8))
{
string content = tr.ReadToEnd();
Assert.Equal("hey there\n", content);
}
}
但我找不到根據文件名獲取文件內容的測試。 是否有可能這樣做,如果是這樣的話?
每個Tree
擁有一個TreeEntry
集合。 一個TreeEntry
保存有關的一些指向元數據(名稱,模式,OID,...) GitObject
。 該GitObject
可以通過訪問Target
一的財產TreeEntry
實例。
大多數情況下, TreeEntry
將指向Blob
或另一Tree
。
Tree
類型公開了一個索引器,它接受一個路徑來輕松檢索最終指向TreeEntry
。 作為一種便捷方法, Commit
公開了這樣的索引器。
因此,您的代碼可以這種方式表達。
using (var repo = new Repository(BareTestRepoPath))
{
var commit = repo.Lookup<Commit>("deadbeefcafe"); // or any other way to retreive a specific commit
var treeEntry = commit["path/to/my/file.txt");
Debug.Assert(treeEntry.TargetType == TreeEntryTargetType.Blob);
var blob = (Blob)treeEntry.Target;
var contentStream = blob.GetContentStream();
Assert.Equal(blob.Size, contentStream.Length);
using (var tr = new StreamReader(contentStream, Encoding.UTF8))
{
string content = tr.ReadToEnd();
Assert.Equal("hey there\n", content);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.