Ano*_*ous 8 .net c# git version-control 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);
}
}
Run Code Online (Sandbox Code Playgroud)
但我找不到根据文件名获取文件内容的测试.是否有可能这样做,如果是这样的话?
nul*_*ken 16
每个Tree都有一个集合TreeEntry.A 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);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3814 次 |
| 最近记录: |