GitSharp可以直接返回Leaf(blob)对象给出leaf的哈希值吗?

时间:2011-09-28 22:16:59

标签: c# git gitsharp

我注意到我可以获取特定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对象可以或 无法通过哈希访问?

非常感谢!

1 个答案:

答案 0 :(得分:2)

您可以将回购中的任何对象设为Blob,就像这样

var blob=repo.Get<Blob>(sha_hash);

如果您知道对象的类型(树,标记或提交),您还可以在Get()中替换类型参数Tree,Tag和Commit for T.。

旁注:在GitSharp中,Leaf是一个Blob,它知道当前版本树中的路径。但是,由于文件可以位于不同分支和修订版本的许多位置,因此无法通过Repository.Get()获取Leaf。