#c# #git #gitsharp
#c# #git #gitsharp
Вопрос:
Я заметил, что я могу получить содержимое определенного листового (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-объекту по имени, идентификатору или пути. Используйте параметр type, чтобы указать, какой объект вы хотите получить. Поддерживаемые типы ветвей, коммитов или тегов могут быть доступны по имени или ссылочному выражению. В настоящее время поддерживаются следующие комбинации: не поддерживается Дерево или листовые (Blob) объекты могут быть адресованы с помощью длинного хэша или их относительного пути к репозиторию
Неясно .. означает ли это, что к объектам дерева или листа можно или нельзя получить доступ через хэш?
Большое спасибо!
Ответ №1:
Вы можете получить любой объект в репозитории в виде двоичного объекта следующим образом
var blob=repo.Get<Blob>(sha_hash);
Если вы знаете тип объекта (дерево, тег или коммит), вы также можете заменить параметры типа Tree, Tag и Commit для T в Get().
Примечание: в GitSharp лист — это большой двоичный объект, который знает свой путь в дереве текущей ревизии. Однако, поскольку файл может находиться во многих местах в разных ветвях и ревизиях, вы не можете получить лист через Repository.Get() .