2

次のように 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) オブジェクトはサポートされていません。長いハッシュまたは相対リポジトリ パスによってアドレス指定できます。

明確ではありません..これは、ツリーまたはリーフオブジェクトにハッシュを介してアクセスできる、またはアクセスできないことを意味しますか?

どうもありがとう!

4

1 に答える 1

2

このように、レポ内の任意のオブジェクトを Blob として取得できます

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

オブジェクトのタイプ (ツリー、タグ、またはコミット) がわかっている場合は、Get() の T の代わりにタイプ パラメータ Tree、Tag、および Commit を使用することもできます。

補足: GitSharp では、リーフは現在のリビジョンのツリー内のパスを認識しているブロブです。ただし、ファイルはさまざまなブランチやリビジョンの多くの場所にある可能性があるため、Repository.Get() を介してリーフを取得することはできません。

于 2011-10-02T05:28:36.480 に答える