GitSharp可以直接返回一个叶子(blob)对象给Leaf 's哈希吗?

本文关键字:Leaf 对象 哈希吗 blob 一个 返回 GitSharp 叶子 | 更新日期: 2023-09-27 18:09:55

我注意到我可以得到一个特定的叶子(blob)的内容对象从一个特定的分支上迭代到一个树的子节点,比如所以:

      _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。所以有没有办法完成通过哈希直接检索叶子?文档说明了

通过名称、id或路径访问git对象。使用类型参数to告诉我你想要什么样的东西。支持的类型有分支、提交或标签可以通过名称或引用来访问表达式。目前支持以下组合:不支持是树或叶(Blob)对象可以通过长散列或它们的相对存储库路径

不清楚……这是否意味着Tree或Leaf对象可以或不能通过散列访问?

非常感谢!

GitSharp可以直接返回一个叶子(blob)对象给Leaf 's哈希吗?

您可以像这样在repo中获得Blob对象

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

如果您知道对象的类型(tree, tag或commit),您还可以将Get()中的T替换为类型参数tree, tag和commit。

旁注:在GitSharp中,叶子是一个Blob,它知道它在当前版本树中的路径。然而,由于一个文件可以在不同分支和版本的许多地方,你不能通过Repository.Get()获得Leaf。