我检查了 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
包含关于指向 GitObject
的一些元数据(名称、模式、oid 等)。 GitObject
可以通过 TreeEntry
实例的 Target
属性访问。
大多数时候,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);
}
}
关于c# - 如何使用 LibGit2Sharp 在 Git 上获取文件内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22034239/