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对象可以或不能通过散列访问?
非常感谢!
您可以像这样在repo中获得Blob对象
var blob=repo.Get<Blob>(sha_hash);
如果您知道对象的类型(tree, tag或commit),您还可以将Get()中的T替换为类型参数tree, tag和commit。
旁注:在GitSharp中,叶子是一个Blob,它知道它在当前版本树中的路径。然而,由于一个文件可以在不同分支和版本的许多地方,你不能通过Repository.Get()获得Leaf。