Может ли GitSharp вернуть объект Leaf (blob) непосредственно с учетом хэша листа?

Я заметил, что я могу получить содержимое определенного объекта Leaf (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. Так есть ли способ выполнить прямой поиск листа по хешу? В документации говорится о методе Get:

Доступ к объекту git по имени, идентификатору или пути. Используйте параметр type, чтобы указать, какой объект вы хотите получить. Поддерживаемые типы: ветви, коммиты или теги могут быть доступны по имени или по ссылочному выражению. В настоящее время поддерживаются следующие комбинации: не поддерживается, если объекты Tree или Leaf (Blob) могут быть адресованы длинным хешем или их относительным путем к хранилищу.

Непонятно... означает ли это, что объекты Tree или Leaf могут или не могут быть доступны через хеш?

Большое спасибо!

1 ответ

Решение

Вы можете получить любой объект в репо как Blob, как это

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

Если вы знаете тип объекта (дерево, тег или фиксация), вы также можете заменить параметры типа Tree, Tag и Commit для T в Get ().

Sidenote: В GitSharp Leaf - это BLOB-объект, который знает свой путь в дереве текущей ревизии. Однако, поскольку файл может находиться во многих местах в разных ветках и ревизиях, вы не можете получить лист через Repository.Get().

Другие вопросы по тегам