我注意到我可以获取特定Leaf(blob)的内容 来自特定分支的对象,通过迭代Tree的子项来完成 这样:
_repository = new Repository(git_url);
IEnumerable<AbstractObject> currentBranchItems = _repository.CurrentBranch.CurrentCommit.Tree.Children;
foreach (var currentBranchItem in currentBranchItems)
{
var currentBranchLeaf = currentBranchItem as Leaf;
_lastLeafHash = currentBranchLeaf.Hash;
Console.WriteLine("Name: " + currentBranchLeaf.Name + " Hash: " + currentBranchLeaf.Hash);
}
但是,如果我有叶子的哈希,这似乎效率很低 我想要检索。有没有办法可以访问Leaf 如果我有哈希,直接从存储库?以下是 不工作:
private static void GetLeafByHash(string hash)
{
var leafAbs = _repository.Get<AbstractObject>(hash);
var leaf = leafAbs as Leaf;
Console.WriteLine("Found Leaf Named: " + leaf.Name);
Console.WriteLine("The data is this big: " + leaf.RawData.Length);
Console.Read();
}
Get方法始终返回NULL。那么有没有办法实现 通过哈希直接检索Leaf?文档说明了 关于Get方法:
按名称,ID或路径访问git对象。使用type参数 告诉你想要什么样的物体。支持的类型是 可通过名称或参考访问分支,提交或标签 表达。目前支持的是以下组合: 不支持 树或叶(Blob)对象可以通过长哈希或它们来解决 相对存储库路径
目前尚不清楚..这是否意味着Tree或Leaf对象可以或 无法通过哈希访问?
非常感谢!
答案 0 :(得分:2)
您可以将回购中的任何对象设为Blob,就像这样
var blob=repo.Get<Blob>(sha_hash);
如果您知道对象的类型(树,标记或提交),您还可以在Get()中替换类型参数Tree,Tag和Commit for T.。
旁注:在GitSharp中,Leaf是一个Blob,它知道当前版本树中的路径。但是,由于文件可以位于不同分支和修订版本的许多位置,因此无法通过Repository.Get()获取Leaf。