Может ли GitSharp вернуть объект Leaf (blob) непосредственно с учетом хэша листа? - PullRequest
2 голосов
/ 29 сентября 2011

Я заметил, что могу получить содержимое определенного листа (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);
               }

Однако, это кажется довольно неэффективным, если у меня есть хэш листа что я хотел бы получить. Есть ли способ, которым я могу получить доступ к листу прямо из репозитория если есть хеш? Следующее делает не работает:

 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-объекту по имени, идентификатору или пути. Используйте параметр типа для расскажите, какой объект вы хотели бы получить. Поддерживаемые типы Филиалы, коммиты или теги могут быть доступны по имени или по ссылке выражение. В настоящее время поддерживаются следующие комбинации: Не поддерживается Объекты Tree или Leaf (Blob) могут быть обработаны длинным хешем или их относительный путь к хранилищу

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

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

1 Ответ

2 голосов
/ 02 октября 2011

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

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

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

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

...