次のように Tree の子を反復処理することで、特定のブランチから特定の Leaf (ブロブ) オブジェクトのコンテンツを取得できることに気付きました。
_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 メソッドについて次のように記載されています。
名前、ID、またはパスで git オブジェクトにアクセスします。type パラメーターを使用して、取得したいオブジェクトの種類を指定します。サポートされているタイプは、ブランチ、コミット、またはタグで、名前または参照式でアクセスできます。現在サポートされているのは、これらの組み合わせです: ツリーまたはリーフ (Blob) オブジェクトはサポートされていません。長いハッシュまたは相対リポジトリ パスによってアドレス指定できます。
明確ではありません..これは、ツリーまたはリーフオブジェクトにハッシュを介してアクセスできる、またはアクセスできないことを意味しますか?
どうもありがとう!